ViewPager吞食onBackPressed,所以FragmentContainerView不能导航



我有一个应用程序,它的布局如下

Activity->ViewPagerFragmentAFragmentContainerViewFragmentB

FragmentContainerView包含一个NavHostFragment,它通过一个nav_graph显示FragmentBFragmentB中有一个按钮,可以导航到FragmentB的新实例。因此,导航图基本上只是一个片段,它有一个链接到自己。

现在如果我有FragmentContainerView直接在我的活动,这工作得很好。但是,如果我将FragmentContainerView放在ViewPager内的另一个片段中,则后退按钮不再允许我导航FragmentB导航图。

我在FragmentContainerView上使用app:defaultNavHost="true",但它没有帮助。

你知道我做错了什么吗?我该怎么做?

根据片段管理器指南:

将导航结构视为一系列层,活动作为最外层,在下面包裹每一层的子片段。每个层必须有一个单独的主要导航片段。当Back事件发生时,最内层控制导航行为。一旦最内层没有更多的片段事务可以弹出,控制返回到下一层,这个过程重复,直到到达活动。

因此,当app:defaultNavHost="true"FragmentA中设置NavHostFragment作为其层(FragmentAchildFragmentManager层)的主要导航片段时,FragmentA必须也必须为了让任何系统后退按钮事件都能到达FragmentA,必须将其设置为主要导航片段。

同一页显示了如何做到这一点:

要在片段事务中定义主导航片段,在事务中调用setPrimaryNavigationFragment()方法,传入childFragmentManager应该具有主控制的片段实例。

虽然ViewPager2有API允许您将主要导航片段设置为当前页面,但ViewPager1没有这样的API(这是您绝对应该转移到ViewPager2的众多原因之一)。

作为ViewPager1的解决方案,FragmentA可以将自己设置为onResume()中的主要导航片段:

public fun onResume() {
super.onResume()
parentFragmentManager
.beginTransaction()
.setPrimaryNavigationFragment(this)
.commit()
}

相关内容

  • 没有找到相关文章

最新更新