如何在使用导航组件和底部导航时保存片段状态?

4

我有一个带有四个片段的底部导航栏和一个活动,底部导航栏是使用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方法不会��调用,所以这种方式行不通。

有什么方法可以让我在第一个碎片中保存来自活动的参数,在底部导航栏切换碎片时保持参数不变呢?


您可以使用单个视图模型,该模型将在这些片段之间共享。 - Muhammad Awais
在需要相同数据的Fragments中使用SharedViewModel - Debarshi Bhattacharjee
1
其实我不想与底部导航的其他片段共享数据,我只想保存我的第一个片段的状态,以便从其他片段返回时args或名称不为空。 - Rahul Pawar
1个回答

1

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