Android Fragments Android工具栏后退按钮与AbstractListDetailFragment(或SlidingPaneLayout)导航组件有关的问题

ymzxtsji  于 2023-03-08  发布在  Android
关注(0)|答案(1)|浏览(206)

在一个Android应用程序中,我使用的是Navigation组件。在一些地方,我使用了列表/细节视图。我使用了AbstractListDetailFragment,还尝试了SlidingPaneLayout。使用AbstractListDetailFragment,它设置了一个OnBackPressedCallback,而使用SlidingPaneLayout,我提供了一个OnBackPressedCallback。在这两种情况下,我得到了相同的行为。
我有这样一个结构:开始片段-〉列表片段-〉细节片段。
在宽屏幕上,一切正常。但是,在窄屏幕上,如果我在Detail Fragment上点击工具栏上的back按钮,它不会将我带回List Fragment,而是返回到Start Fragment。硬件上的back按钮似乎被OnBackPressedCallback捕获并执行了正确的操作,但工具栏上的back按钮没有。
我当然可以在Detail Fragment中捕捉到R.id.home,但是对于AbstractListDetailFragment,它对自己所在的世界一无所知。它只是接收了一些参数的另一个片段,并使用这些参数完成自己的任务。它不知道自己是否是并排的。更复杂的是,它在自己的导航图中。
怎么样才是正确的处理方式?

sqyvllje

sqyvllje1#

将此添加到详图片段可解决以下问题:

val menuHost: MenuHost = requireActivity()

    menuHost.addMenuProvider(
        object : MenuProvider {
            override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
            }

            override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
                if (menuItem.itemId == android.R.id.home) {
                    requireActivity().onBackPressedDispatcher.onBackPressed()
                    return true
                }
                return false
            }
        },
        viewLifecycleOwner
    )

相关问题