上次庫(kù)更新時(shí)間
2020 年 1 月 22 日
當(dāng)前穩(wěn)定版
| 1.1.0 |
API 參考文檔
Interfaces-- OnBackPressedDispatcherOwner
用途:處理系統(tǒng)后退按鈕
舉例:可以在fragment里用該方法處理系統(tǒng)返回鍵
//定義變量
private var backListener: OnBackPressedCallback? = null
private var backListener2: OnBackPressedCallback? = null
//初始化
backListener = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
logI("點(diǎn)擊事件1")
backListener?.isEnabled = false
backListener2?.isEnabled = true
}
}
backListener2 = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
logI("點(diǎn)擊事件2")
backListener?.isEnabled = true
backListener2?.isEnabled = false
}
}
//fragment新增callback
requireActivity().onBackPressedDispatcher.addCallback(backListener2!!)
requireActivity().onBackPressedDispatcher.addCallback(backListener!!)
tips:
1狐血、addCallback方法是把callback添加到一個(gè)mOnBackPressedCallbacks的ArrayDeque里,觸發(fā)返回鍵的時(shí)候會(huì)執(zhí)行最近被添加的且isEnabled = true的 callback方法。
//以下是源碼
@MainThread
public void onBackPressed() {
Iterator<OnBackPressedCallback> iterator =
mOnBackPressedCallbacks.descendingIterator();
while (iterator.hasNext()) {
OnBackPressedCallback callback = iterator.next();
if (callback.isEnabled()) {
callback.handleOnBackPressed();
return;
}
}
if (mFallbackOnBackPressed != null) {
mFallbackOnBackPressed.run();
}
}
2构蹬、OnBackPressedCallback有如下方法可以調(diào)用
//獲取callback開啟狀態(tài)
logI("${backListener?.isEnabled}")
//設(shè)置callback開啟狀態(tài)
backListener?.isEnabled = false
//觸發(fā)callback
backListener?.handleOnBackPressed()
//移除callback
backListener?.remove()