当前位置: 首页 > 知识库问答 >
问题:

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

段干靖
2023-03-14

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

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

通过给出上述代码,我成功地将第三项显示为选中项。但这里的问题是片段正在被重新创建,而我的savedInstanceState在该片段中始终为null。我已经给了

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

在我的片段中。

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

更新:我在我的supportFragmentManager中没有看到任何片段,尽管我已经给出了retainInstance=true

共有3个答案

贺俊材
2023-03-14

当您将片段替换为新片段时,您是否尝试过将. addToBackStack(null)方法添加到事务管理器中。这应该会在您调用提交到保存的安装祖先之前保存片段的状态。如果您执行. addToBackStack(String tag),您甚至可以调用特定片段的后栈。

这里有一些文档

我认为如果你想在片段中保留配置,你也可以在这里和这里阅读setRetainInstance(true),这种方法可以避免在设备定向上重新创建片段,但如果这样做,你可能需要重写activitycreated上的方法,在片段中进行onAttach和onDetach,并告诉他们如何绘制片段,而不是像现在一样在onCreateView中进行绘制。

苏建安
2023-03-14
bottomNav.selectedItemId = savedInstanceState.getInt("tabSelected")

此行重新选择底部导航中的项目,但也会触发菜单操作。可能是菜单侦听器只是用一个新实例替换现有片段。

设备旋转后,现有片段仍应存在,且savedINstanceState为非null

夏侯昆琦
2023-03-14

确保在清单文件中为要加载片段的活动写下下面的行。

android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
 类似资料:
  • 我正在创建和应用程序,到目前为止一切都很好。今天,我处理一个片段中的数据,以访问我的webservice并返回json,然后将该数据插入到我的sqlite中,然后在listview中显示该数据并逐秒更新数据。 一切都是正确的,直到我发现如果我在底部导航中单击片段中的项目的位置过快,它将在应用程序对片段执行事务时崩溃。只有当我在该片段和其他4个片段中的多个片段之间单击时,才会发生这种情况。 所以我的

  • 我有底部的导航栏,点击导航栏中的项目,我正在替换片段。我有3个片段A、B、C,所以点击B项B片段被加载,在B中我调用3-4个API。所以现在如果我转到C,然后再次转到B,将创建一个新的B片段实例,并再次调用这些API,那么如何保存片段实例状态,并且在更改片段时不再调用API。这是我的密码。 我已经在MainActivity的onCreate中初始化了上面的片段成员变量

  • 但是,当我初始化BottomNavigationView时,我会得到: 我正在从一个片段初始化BottomNativigationView。我猜这就是问题所在,但我想不出解决办法。 下面是为片段设置导航的活动的BottomNavigationView xml。

  • 我想在切换项目时切换到底部导航视图的图标。 我有浅蓝色图标和深蓝色图标的选定项目。我正在为每个导航项目使用选择器drawable,但我看到下面这样的图像,灰色为非活动图像,蓝色为活动图像 这是我的代码 bottom_nav_menu 家 和选择器 计划程序选择器 设置选择器 收藏夹选择器 首页选择器 活动代码 我做错了什么?请帮助。。。 编辑:我正在使用以下绘图工具 在此处输入链接描述 在此处输入

  • 我创建了一个带有“底部导航活动”的新项目: 这是生成的代码: 如何使用底部栏更改为新片段?例如,我有3个片段:Fragment1 Fragment2和Fragment3,我想用底部栏中的3个按钮更改为它们。我还想通过左右滑动手指来切换片段,我该怎么做?

  • 我试图创建一个单一活动的Android应用程序。我有带有BottomNavigationView的MainActivity (only activity),三个顶级片段和一些子片段。我的要求是,每当屏幕显示顶级片段,底部导航应该是可见的,这样切换是可能的。但是当我查看任何子片段时,底部导航应该是隐藏的。是否有任何现成的方式使用导航组件或需要手动更改可见性?