底部导航视图中加载的片段在方向更改时变为空

问题描述 投票:0回答:2

在我的活动中,我有一个包含5个项目的底部导航视图。在每个项目上,单击底部导航视图,我正在加载片段。假设我在第三个项目上,并且正在更改方向,然后重新创建活动,它显示了所选的第一个项目。通过在活动中提供以下代码,避免了这种情况。

override fun onSaveInstanceState(outState: Bundle) {
    super.onSaveInstanceState(outState)
    outState.clear()
    outState.putInt("tabSelected", bottomNav.selectedItemId)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
    super.onRestoreInstanceState(savedInstanceState)
    bottomNav.selectedItemId = savedInstanceState.getInt("tabSelected")
}

通过提供上面的代码,我设法显示了第3个项目。但是这里的问题是片段正在重新创建,并且我的savedInstanceState在该片段中始终为null。我给了

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    retainInstance = true
}

在我的片段中。

在这种情况下,如何保存片段的所有内容?

更新:尽管我给了supportFragmentManager,但我的retainInstance = true中没有看到任何碎片>

在我的活动中,我有一个包含5个项目的底部导航视图。在每个项目上,单击底部导航视图,我正在加载片段。假设我在第三个项目上,并且正在更改方向,...

android android-fragments kotlin screen-orientation bottomnavigationview
2个回答
0
投票

您是否曾尝试用新片段替换片段时将.addToBackStack(null)方法添加到事务管理器中。这应该在您调用commit to savedinstancestate之前保存片段的状态。如果您执行.addToBackStack(String tag),您甚至可以调用特定片段的Backstack。


0
投票
bottomNav.selectedItemId = savedInstanceState.getInt("tabSelected")
© www.soinside.com 2019 - 2024. All rights reserved.