繁体   English   中英

如果 OnBackPressedCallback 在片段中不起作用,如何修复它?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM