[英]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.