android - 底部导航 View 中加载的 fragment 在方向更改时变为空

标签 android android-fragments kotlin screen-orientation bottomnavigationview

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

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")
}

通过给出上面的代码,我成功地显示了所选的第三个项目。但这里的问题是 fragment 正在重新创建,而我的 savingInstanceState 在该 fragment 中始终为 null。我已经给了

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

在我的 fragment 中。

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

更新:我在 supportFragmentManager 中没有看到任何 fragment 虽然我已经给出了retainInstance = true

最佳答案

确保在 list 文件中为要加载 fragment 的 Activity 写入以下行。

android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"

关于android - 底部导航 View 中加载的 fragment 在方向更改时变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60850190/

相关文章:

http - 在 Ktor 中测试 Post 请求

android - Kotlin addTextChangeListener lambda?

android - 如何让表格布局的第一行占据整个空间

java - 安卓.view.InflateException : Binary XML file line #87: Error inflating class TextView

android - 在 fragment 中使用 PlacePicker

android - 将监听器设置为来自 Fragment 的 Android 服务

android - RecyclerView 未在后按时填充

android - 在Android中将ExpandableListView的指示器放在右侧

java - 如何使用 Retrofit 找到正确的端点以将 JSON 对象 POST 到 JSONbin

android - 泛型类型和多态性