如何使用Jetpack Navigation组件从ViewPager的片段导航到其他片段?

4

我有一个应用程序,基于Android Jetpack Navigation组件,并具有带有ViewPager的Tab UI。

例如,Tab UI中有片段。 (不是BottomNavigation UI)

  • MainFragment:这个片段持有3个 Tab 片段作为 Tab & ViewPager。
  • DetailsFragment

这两个片段存在于nav_graph.xml中。

还有其他:

  • TabAFragment
  • TabBFragment
  • TabCFragment

这3个片段在nav_graph.xml中不存在

我想知道的是如何从TabXFragment导航到DetailsFragment。

实际上,导航并不困难。 它是相同的。 我只需调用“findNavController.navigate()”即可进行导航。

但问题是“返回”按钮。

当我在DetailsFragment上点击“返回”按钮时,它会显示奇怪的屏幕。 只有白色屏幕。 没有TabView。

我期望它显示TabXFragment。 但它没有...

所以我使用Activity而不是DetailsFragment解决了这个问题。 但我想知道如何处理此问题...

(对我的英语技能感到抱歉)


你介意分享一下你是如何从ViewPager导航到DetailsFragment的吗?当我设置它时,片段管理器会抱怨该片段已经被添加并崩溃了。我认为它是在适配器中添加了一次,另一次是从nav_graph中添加的。如何设置navgraph以理解Tab A可以导向DetailsFrag,而Tab B也可以执行相同的操作或具有不同的操作? - Alon
1个回答

0

我使用了这种方法,对我很有效。

只需在主fragment中像下面的代码一样简单地使用ViewPager2

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

然后在您的导航图中,从MainFragment到DetailsFragment创建一条路线

在您的ViewPager片段(如TabAFragment)中,只需从MainFragment导航到DetailsFragment

别忘了添加以下适配器

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]
    }
}

最后,在您的DetailsFragment中,只需使用以下代码来完成当前片段

findNavController().popBackStack()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接