在我的活动中,我有一个包含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
当您将片段替换为新片段时,您是否尝试过将. addToBackStack(null)
方法添加到事务管理器中。这应该会在您调用提交到保存的安装祖先之前保存片段的状态。如果您执行. addToBackStack(String tag)
,您甚至可以调用特定片段的后栈。
这里有一些文档
我认为如果你想在片段中保留配置,你也可以在这里和这里阅读setRetainInstance(true),这种方法可以避免在设备定向上重新创建片段,但如果这样做,你可能需要重写activitycreated上的方法,在片段中进行onAttach和onDetach,并告诉他们如何绘制片段,而不是像现在一样在onCreateView中进行绘制。
bottomNav.selectedItemId = savedInstanceState.getInt("tabSelected")
此行重新选择底部导航中的项目,但也会触发菜单操作。可能是菜单侦听器只是用一个新实例替换现有片段。
设备旋转后,现有片段仍应存在,且savedINstanceState为非null
确保在清单文件中为要加载片段的活动写下下面的行。
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),三个顶级片段和一些子片段。我的要求是,每当屏幕显示顶级片段,底部导航应该是可见的,这样切换是可能的。但是当我查看任何子片段时,底部导航应该是隐藏的。是否有任何现成的方式使用导航组件或需要手动更改可见性?