android - 底部导航视图片段在已创建时重新创建
问题描述
在我的应用程序中,我使用Jetpack Navigation和BottomNavigationView
. 我有 4 个片段:主页、搜索、通知、配置文件,当我在主页片段中时,我再次单击底部导航视图中的主页项,它会重新创建片段。我搜索了,但主要是针对那些不使用喷气背包导航的人。
(顺便说一句,我只希望在我已经在该片段上时不重新创建片段,如果我不在那个片段中,可以重新创建)
以下是我的设置:
val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView_mainActivity) as NavHostFragment
navController = navHostFragment.navController
binding.bottomNavView.setupWithNavController(navController)
解决方案
我阅读了谷歌的源代码。我看到了,它总是会创建新的片段。
你有一个底部导航,就像我正在构建的应用程序一样。:))
对我来说,我没有将菜单项用于底部导航视图。我为它添加了一个自定义视图。
(我有 MainActivity、MainViewModel 用于管理操作栏、底部导航视图。)
然后在自定义视图中,当客户点击项目时,我会检查他们要打开的页面是否与当前页面相同。如果它们相同,我不会打开它。像这样:
fun openHomePage() {
if (pageID.value != R.id.nav_home) {
pageID.postValue(R.id.nav_home)
}
}
pageID 存储当前页面的 id:
var pageID = MutableLiveData<Int>()
private set
在 MainActivity 中:
mainViewModel.pageID.observe(this, Observer {
val currentPageId = findNavController(R.id.nav_host_fragment).currentDestination?.id
if (it != 0 && it != currentPageId) {
drawerLayout.close()
navigatePageWithId(it)
}
})
推荐阅读
- grid - 如何使用浮动操作按钮将新的网格项目或图像添加到已经构建的网格视图图像 basd Flutter 应用程序
- javascript - JSON 中第 2 位的意外令牌 I
- c++ - 链接器找不到头文件 (MSVC) 的 .cpp 实现
- node.js - 如何确保一个异步函数在 NodeJS 中的另一个函数之前运行?
- html - HTML/CSS - div 高度问题
- node-red - 如何在节点红色 html 文件中生成脚本模板元素
- r - 在不需要时省略可选输入
- javascript - 为什么这个子事件不更新父级(Vue)中的状态
- python - 比较 n-gram 以分组重复
- mysql - Sequelize 不会跳过锁定的行