Android 导航popBackStack禁用对此片段的进一步导航
我在使用Android 导航popBackStack禁用对此片段的进一步导航,android,android-fragments,navigation,android-jetpack,android-navigation,Android,Android Fragments,Navigation,Android Jetpack,Android Navigation,我在使用导航组件时加载了一个片段,该代码可以正常工作 findNavController().navigate(R.id.menu_nav_graph, bundleOf("menuItem" to item)) 我想在点击按钮的时候关闭这个片段,我用这个代码来实现它 findNavController().popBackStack() 应用程序导航到上一个片段,但当我尝试使用上面的代码再次导航到弹出的片段目标时,应用程序到达了代码,但什么也没有发生。片段未加载。因此,导航代码被执行,但片段
导航
组件时加载了一个片段,该代码可以正常工作
findNavController().navigate(R.id.menu_nav_graph, bundleOf("menuItem" to item))
我想在点击按钮的时候关闭这个片段,我用这个代码来实现它
findNavController().popBackStack()
应用程序导航到上一个片段,但当我尝试使用上面的代码再次导航到弹出的片段目标时,应用程序到达了代码,但什么也没有发生。片段未加载。因此,导航代码被执行,但片段没有打开。当我在onClick侦听器中使用它而不是使用popbackbackstack
时,也会发生同样的情况
activity?.onBackPressed()
同样的效果,应用程序到达导航行,没有崩溃,没有抛出异常,只是没有打开片段
同时,我的后向箭头导航正在工作,在按片段的后退按钮后,它确实多次到达同一目的地。这让我很困惑,因为我在onOptionsItemSelected
中使用了相同的代码,而且它可以正常工作,所以我不明白在单击按钮时调用onBackPressed()
有什么不同
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
activity?.onBackPressed()
true
}
else -> super.onOptionsItemSelected(item)
}
如何在点击按钮时关闭一个片段,从而能够导航到同一个目的地?调试更多后,我找到了根本原因,问题不在于
导航
没有执行导航,而在于导航
库实现中的片段
生命周期。后退时,片段
未被销毁,再次导航到同一目的地后,onBackPressed
立即被触发
要触发onBackPressed
我正在使用LiveData
从ViewModel
推送此命令。当返回到片段
时,再次将相同的命令推送到LiveData
,并再次触发导航返回,因此似乎没有发生导航
解决方案是实现SingleLiveEvent
LiveData
。它只推了一次价值
这是到实现的链接您的意思是
findNavController()。导航(R.id.menu\u nav\u graph,bundleOf(“menuItem”to item))
从上一个片段返回后不工作?是的,正是我的意思,它只对第一个导航操作有效,当您退出它时,它不会再次工作