【问题标题】:Handling backstack in jetpack navigation在喷气背包导航中处理 backstack
【发布时间】:2020-10-19 05:22:56
【问题描述】:

我正在使用 BottomNavigationView 和 Jetpack Navigation。我还将所有 Fragments 设置为顶级目的地。

val host : NavHostFragment = supportFragmentManager
            .findFragmentById(R.id.nav_host_fragment) as NavHostFragment? ?: return
        val navController = host.navController
        val appBarConfig = AppBarConfiguration(topLevelDestinationIds = setOf(R.id.library_fragment,R.id.account_fragment,R.id.calender_fragment,R.id.home_fragment,R.id.notice_fragment))
        val bottomNavView = binding.bottomNavView

        setSupportActionBar(binding.toolbar)
        setupActionBarWithNavController(navController,appBarConfig)
        bottomNavView.setupWithNavController(navController)

在第二个底部导航菜单项上有LibraryFragment,我在其中使用TabLayoutLibraryFoldersFragment 对应于LibraryFragment 内部的一个 Tab。 LibraryFoldersFragment 包含一个 RecyclerView。单击RecyclerView 项目时,LibraryFilesFragment 将替换LibraryFoldersFragment

val fragment = LibraryFilesFragment.newInstance(item)
                childFragmentManager.beginTransaction().addToBackStack(null).replace(R.id.frameLayout, fragment)
                    .commit()

问题是在LibraryFilesFragment 应用程序中按下后退按钮时直接导航到第一个底部导航菜单项。但我希望它导航到LibraryFoldersFragment

【问题讨论】:

  • 你在使用ViewPager2(完全取代ViewPager)吗?
  • @ianhanniballake 我正在使用ViewPager2。我还上传了我的应用的屏幕截图。

标签: android android-jetpack android-jetpack-navigation


【解决方案1】:

由于您使用的是 Jetpack 的 Navigation 组件,而不是自己提交片段事务。创建一个导航 xml 以将您的 LibraryFoldersFragment 声明为 LibraryFilesFragment 导航。在 recyclerView 项目上使用findNavController().navigate() 点击导航。 使用 NavController 设置 bottomNavView,并创建不同的所需导航 xml 的 GraphId。

Sample reference

【讨论】:

  • 但我使用的是TabLayout。根据此答案link 不应将TabLayout 与Jetpack Navigation 一起使用。我还上传了我的应用的屏幕截图。
  • @ianhanniballake w.r.t. 有什么变化吗?这在 ViewPager2 中针对 this old issue?
猜你喜欢
  • 1970-01-01
  • 2020-03-24
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
相关资源
最近更新 更多