【问题标题】:How to save fragment state while using Navigation component and Bottom Navigation?使用导航组件和底部导航时如何保存片段状态?
【发布时间】:2020-11-25 08:16:02
【问题描述】:

我在底部导航中有四个片段和一个活动,底部导航是使用这样的 NavController 设置的

navController = Navigation.findNavController(this, R.id.dashboardNavHostFragment).apply {
        setGraph(R.navigation.nav_graph , bundle)
    }
    bottomNavigationView.setupWithNavController(navController)

我正在传递一些我在底部导航的第一个片段中需要的数据。 问题是它工作正常,数据像这样进入片段中

private val args: PlayerFeedFragmentArgs by navArgs()
private var data: String? = args.name

但是当我使用底部导航导航并返回到我的第一个片段时,数据以 null 的形式出现 我尝试使用

保存数据
override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.putString("name", data)
}

并在 onViewCreated 中取回数据,但它不起作用,因为在底部导航的片段之间切换时不会调用 onSaveInstanceState。

如何在我的第一个片段中保存来自活动的传入参数,以便当我从底部导航切换片段时它保持不变。

【问题讨论】:

  • 您可以使用单个视图模型,它将在这些片段之间共享。
  • 对需要相同数据的片段使用SharedViewModel
  • 实际上我不想与底部导航的其他片段共享数据,我只想保存我的第一个片段的状态,以便当我从其他片段返回到它时 args 或名称不为空。

标签: android android-fragments bottomnavigationview android-architecture-navigation android-navigation


【解决方案1】:

您可以尝试使用 SavedStateViewModel 处理程序

https://developer.android.com/reference/kotlin/androidx/lifecycle/SavedStateViewModelFactory

一个简单的例子可以找到here:

使用这种方法,您不必与其他片段共享数据。

【讨论】:

    猜你喜欢
    • 2021-02-21
    • 2021-08-05
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多