【问题标题】:Navigation component with bottom nav always creates new fragment底部导航的导航组件总是创建新的片段
【发布时间】:2019-02-26 08:58:34
【问题描述】:

是否可以让我的导航组件在单击底部导航项时不创建新片段(但使用现有片段)?

我只想使用导航组件。

binding.bottomNavBar.setOnNavigationItemSelectedListener {
        when (it.itemId) {
            R.id.currentWeatherFragment -> {
                navController.popBackStack(R.id.currentWeatherFragment, false)
                return@setOnNavigationItemSelectedListener true
            }

            R.id.futureListWeatherFragment -> {
                if (futureNumber > 0) {
                    Log.d("test", "popbackstack")
                    navController.popBackStack(R.id.futureListWeatherFragment, false)
                } else {
                    navController.navigate(navController.graph.findNode(R.id.futureListWeatherFragment)!!.id)
                    futureNumber++
                    Log.d("test", "navigate")
                }
                return@setOnNavigationItemSelectedListener true
            }

            R.id.settingsFragment -> {
                if (settingsNumber > 0) {
                    navController.popBackStack(R.id.settingsFragment, false)
                } else {
                    navController.navigate(navController.graph.findNode(R.id.settingsFragment)!!.id)
                    settingsNumber++
                }
                return@setOnNavigationItemSelectedListener true
            }

        }
        false
    }

【问题讨论】:

  • use existing one 片段是什么意思?对所有导航项使用相同的片段?还是只创建一次片段,导航更改后不再创建它们?
  • 创建一次片段,不再创建它们
  • 猜是因为navController.popBackStack。您是否尝试改用 navigate 方法?

标签: android kotlin android-architecture-navigation


【解决方案1】:

恐怕现在不可能。由于导航组件仍处于测试阶段,遗憾的是它缺乏适应所有情况的能力。

一种解决方案是将所有数据保存在视图模型中,并在每次 navcontroller 创建片段的新实例时使用这些数据。这样,您可以保留已获取的数据。此外,您的业务逻辑将与您的 UI 逻辑分离,因此您的数据也可以在配置更改后继续存在。

更多关于 Viewmodels 的信息here

【讨论】:

  • 我正在使用 ViewModels,我的问题是片段的状态,而不是数据。
  • 它不是测试版。这是RC1
猜你喜欢
  • 2022-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多