[英]How to fix OnBackPressedCallback if it doesn't work in Fragment?
在這里我覆蓋了 handleOnBackPressed() 方法:
Log.d("Fragment", "onViewCreated")
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner) {
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
Log.d("Fragment", "Back pressed")
if (binding.crimeTitle.text.isBlank()) {
Toast.makeText(context, "Title can't be empty!", Toast.LENGTH_SHORT).show()
Log.d("Fragment", "Toast showed")
} else {
Log.d("Fragment", "BackStack popped")
findNavController().popBackStack()
}
}
}
}
但之后我在日志中只看到“onViewCreated”,按下“后退”按鈕后沒有任何反應。
我預計至少會看到“Back pressed”。
沒有這部分代碼,“后退”按鈕照常工作。
日志:
( https://i.stack.imgur.com/bAmxq.png )
最后,我找到了解決方案。
在 Fragment 的“onCreate”function 中添加該回調很重要,否則“后退”按鈕不會對您的操作做出反應。 “addCallback(owner)”中的所有者必須是“this”,如果您嘗試傳遞“viewLifecycleOwner”,您將得到一個異常:
FATAL EXCEPTION: main
java.lang.IllegalStateException: Can't access the Fragment View's LifecycleOwner when getView() is null i.e., before onCreateView() or after onDestroyView()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.