java - 如何在底部导航中保存片段状态
问题描述
我知道其他人已经问过这个问题,但我找不到任何人来帮助自己。我有一个包含三个片段的底部导航视图。
当我导航出这个底部导航所在的活动时,我希望能够将最后访问的片段保存在底部导航中,并在返回时恢复它。
目前,这是使用 完成的bottomNav.selectedItemId
,但是没有伴随片段更改。它恢复了一个空白屏幕,除了我导航到底部导航中的另一个片段并返回。如何使用当前数据恢复片段?
val title: String by lazy {
getName()
}
val profileName by lazy {
profile_drawer_view.findViewById<TextView>(R.id.profile_name)
}
// Get logged-in user
private val currentUser: User? by lazy {
authViewModel.currentUser
}
private val header by lazy {
authViewModel.header
}
@Inject
lateinit var viewModelProviderFactory: ViewModelFactory
private val authViewModel: AuthViewModel by lazy {
ViewModelProvider(this, viewModelProviderFactory).get(AuthViewModel::class.java)
}
val checkConnectionTv by lazy{
dialog.findViewById<TextView>(R.id.loader_layout_tv)
}
lateinit var navController:NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_dashboard)
changeStatusBarColor(R.color.colorWhite)
i(title, "Oncreate")
navController = Navigation.findNavController(this, R.id.dashboard_fragment)
bottomNav.setupWithNavController(navController)
//
}
private fun logoutRequest() {
authViewModel.logout(this)
}
override fun onStart() {
super.onStart()
bottomNav.selectedItemId = authViewModel.lastFragmentId
Log.i(title, "onStart")
}
override fun onPause() {
super.onPause()
authViewModel.lastFragmentId = bottomNav.selectedItemId
}
override fun onRestart() {
super.onRestart()
i(title, "Restart")
}
override fun onDestroy() {
super.onDestroy()
i(title, "onDestroy")
}
}
解决方案
我想我忘了提到我正在使用带有底部导航的导航组件。
我能够保存和恢复使用导航控制器访问的最后一个片段
navController.navigate(authViewModel.lastFragmentId ?: R.id.profileFragment)
推荐阅读
- javascript - 如何在json文件javascript中写入数据而不是在节点js中
- javascript - 带有 Electron 的 TestCafe 抛出“未捕获的类型错误:无法读取未定义的属性‘源’”
- xml - Jaxb:验证子元素
- javascript - 如何在承诺中添加超时?
- javascript - 通过 GetElementByName 获取文本区域的值
- macos - Flutter 找不到 tools.jar
- c# - 仅当对象在一行上不为空时才设置属性
- python - 使用 Dask 的笛卡尔积
- javascript - 反应表单事件没有触发
- python - 张量流模型对熊猫数据框的准确性和损失