簡體   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