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

70gysomp  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(180)

我有一个应用程序。它基于Android的Jetpack导航组件,并与ViewPager选项卡用户界面.
例如,存在作为选项卡UI的片段。(而不是BottomNavigation UI)

  • 主片段:它包含3个选项卡片段作为选项卡和视图分页器。
  • 细节片段

这两个片段存在于nav_graph. xml中。
和其他:

  • 标签片段
  • 选项卡B片段
  • 选项卡片段

nav_graph.xml中不存在这3个片段
我想知道的是如何从TabXFragment导航到DetailsFragment。
实际上,导航并不难。它是一样的。我可以做导航只是调用“findNavController.navigate()"。
但问题是“后退”按钮。
当我点击DetailsFragment上的“后退”按钮时,它显示了奇怪的屏幕。只有白色屏幕。没有TabView。
我期望它显示TabXFragment。但是它没有...
所以我用Activity而不是DetailsFragment解决了这个问题。但是我想知道我该如何处理这个问题...
(抱歉我的英语不好)

6tr1vspr

6tr1vspr1#

我用了这个方法,它对我很有效
只需在MainFragment中使用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()

相关问题