如何使用喷气背包导航组件从 ViewPager 的片段导航到其他片段?



我有一个应用。它基于Android JetPack导航组件,并具有带有ViewPager的Tab UI。

例如,有片段为tab ui。(不是底部记录UI(

  • mainfragment:这有3个选项卡片段,如tab&ViewPager。
  • 详细信息fragment

nav_graph.xml上存在这两个片段。

和其他:

  • tabafragment
  • tabbfragment
  • tabcragment

nav_graph.xml上不存在这三个片段

我想知道的是如何从tabxfragment导航到详细信息。

实际上,导航并不困难。是一样的。我可以做导航,只是调用" findnavcontroller.navigate(("。

但是问题是"后退"按钮。

当我触摸详细信息范围的"后退"按钮时,它显示了奇怪的屏幕。只是白屏。没有tabview。

我希望它显示出tabxfragment。但这不是...

因此,我使用活动而不是细节范围解决了此问题。但是我想知道如何处理这个问题...

(对不起,我的英语技巧不佳(

我使用了此方法,它对我有用

只需像以下代码那样在主框架中使用 ViewPager2

 val adapter =ViewPagerAdapter(childFragmentManager,lifecycle)
 adapter.addFragment(TabAFragment(),"A")
 adapter.addFragment(TabAFragment(),"B")
 adapter.addFragment(TabAFragment(),"C")
 binding.viewpager.adapter =adapter
 adapter.notifyDataSetChanged()

然后在您的导航图中创建从大型框架到详细信息的路线

以及您的ViewPager片段(如Tabafragment(,只需从Mainfragment导航到详细信息范围

,不要忘记添加像下面的适配器

class ViewPagerAdapter (manager: FragmentManager, lifecycle: Lifecycle) :  FragmentStateAdapter(manager,lifecycle ){
    private val fragmentList : MutableList<Fragment> =ArrayList()
    private val titleList : MutableList<String> =ArrayList()
    override fun getItemCount(): Int {
        return fragmentList.size
    }
    override fun createFragment(position: Int): Fragment {
        return  fragmentList[position]
    }

    fun addFragment(fragment: Fragment, title: String){
        fragmentList.add(fragment)
        titleList.add(title)
    }
    fun getPageTitle(position: Int): CharSequence? {
        return titleList[position]
    }
}

最后,在您的详细信息中,只需使用以下代码即可完成当前片段

findNavController().popBackStack()

最新更新