在我的活动中,我有一个包含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个项目的底部导航视图。在每个项目上,单击底部导航视图,我正在加载片段。假设我在第三个项目上,并且正在更改方向,...
您是否曾尝试用新片段替换片段时将.addToBackStack(null)
方法添加到事务管理器中。这应该在您调用commit to savedinstancestate之前保存片段的状态。如果您执行.addToBackStack(String tag)
,您甚至可以调用特定片段的Backstack。
bottomNav.selectedItemId = savedInstanceState.getInt("tabSelected")