父母片段和子女碎片之间的生命周期

发布于 2025-01-23 05:10:58 字数 1080 浏览 2 评论 0原文

所有碎片都从底层继承。

我想分别将新闻事件退还给每个片段。但是BaseFragment有类似的默认背面新闻事件。

    override fun onResume() {
        super.onResume()
        logd("onResume() BaseFragment")
        requireActivity().onBackPressedDispatcher.addCallback(this, backPressCallback)
    }

孩子的片段

    override fun onResume() {
        super.onResume()
        logd("onResume() ChildFragment")
        requireActivity().onBackPressedDispatcher.addCallback(this, backPressCallback)
    }

还将打印

onResume() BaseFragment
onResume() ChildFragment

,因此,frag fragment覆盖了,当我按下返回按钮时,调用了Child Fragment的BackpressCallback

但是,当我出去回来时,订单是不同的。

onResume() ChildFragment
onResume() BaseFragment

因此,用户会看到儿童剥落,但底层范围的backpresscallback被调用。它的行为与我期望的不同。 (例如。我想要PopBackStack,但要关闭应用程序)

如何解决此问题?还是在调用父片后有任何方法?

根据本文,必须在儿童范围前调用基础范围。但这似乎并非如此。

All the Fragment inherits from BaseFragment.

And I'd like to give back press event respectively to each fragment. But BaseFragment has default back press event like this.

    override fun onResume() {
        super.onResume()
        logd("onResume() BaseFragment")
        requireActivity().onBackPressedDispatcher.addCallback(this, backPressCallback)
    }

And also the child fragments have

    override fun onResume() {
        super.onResume()
        logd("onResume() ChildFragment")
        requireActivity().onBackPressedDispatcher.addCallback(this, backPressCallback)
    }

It will print,

onResume() BaseFragment
onResume() ChildFragment

So, the ChildFragment override and when I press back button, ChildFragment's backPressCallback is called.

However, when I go out and come back, the order is different.

onResume() ChildFragment
onResume() BaseFragment

So, the user sees ChildFragment but BaseFragment's backPressCallback is called. And it behaves different from what I expected. (ex. I want popBackStack but close the app)

How can I solve this problem? Or is there any method that called after the parent fragment is called?

According to this article, BaseFragment must be called before ChildFragment. But it doesn't seem so.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无边思念无边月 2025-01-30 05:10:58
    activity?.onBackPressedDispatcher?.addCallback(
                    viewLifecycleOwner,
                    object : OnBackPressedCallback(true) {
                        override fun handleOnBackPressed() {
                            try {
                                if (!isChildFragmentOpen)
                                {
                                    val trans: FragmentTransaction =
                                        parentFragmentManager.beginTransaction()
                                    trans.remove(Fragment())
                                    trans.commit()
                                }else{
                                    parentFragmentManager.popBackStack()
                                } 
                            } catch (e: Exception) {
                                e.message
                            }
                        }
                    })

将其添加到您的片段中。

    activity?.onBackPressedDispatcher?.addCallback(
                    viewLifecycleOwner,
                    object : OnBackPressedCallback(true) {
                        override fun handleOnBackPressed() {
                            try {
                                if (!isChildFragmentOpen)
                                {
                                    val trans: FragmentTransaction =
                                        parentFragmentManager.beginTransaction()
                                    trans.remove(Fragment())
                                    trans.commit()
                                }else{
                                    parentFragmentManager.popBackStack()
                                } 
                            } catch (e: Exception) {
                                e.message
                            }
                        }
                    })

add this to your fragment.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文