Rai*_*ker 3 navigation android android-fragments android-navigation android-jetpack
Navigation我在使用带有此代码的组件时加载片段,并且它有效。
findNavController().navigate(R.id.menu_nav_graph, bundleOf("menuItem" to item))
Run Code Online (Sandbox Code Playgroud)
我想在单击按钮时关闭片段,我使用此代码
findNavController().popBackStack()
Run Code Online (Sandbox Code Playgroud)
应用程序导航到上一个片段,但是当我尝试使用上面的代码再次导航到弹出的片段目的地时,应用程序到达代码但没有任何反应。片段未加载。因此,导航代码已执行,但片段未打开。popBackStack当我不使用它与 onClick 监听器一起使用时,也会发生同样的情况
activity?.onBackPressed()
Run Code Online (Sandbox Code Playgroud)
同样的效果,应用程序到达导航线,没有崩溃,没有抛出异常,只是没有打开 Fragment。
同时,我的后退箭头导航正在工作,并且在从片段按回后,它确实多次转到同一目的地。这让我感到困惑,因为我使用相同的代码并且onOptionsItemSelected它可以工作,所以我不明白当我只调用onBackPressed()按钮单击时它有何不同。
override fun onOptionsItemSelected(item: MenuItem): Boolean =
when (item.itemId) {
android.R.id.home -> {
activity?.onBackPressed()
true
}
else -> super.onOptionsItemSelected(item)
}
Run Code Online (Sandbox Code Playgroud)
如何在单击按钮时关闭片段并能够导航到相同的目的地?
经过更多调试后,我发现了根本原因,问题不在于不navigation执行导航,而在于库实现Fragment中的生命周期navigation。Fragment后退时并没有被破坏,并且在onBackPressed再次导航到同一目的地后立即被触发。
为了触发,onBackPressed我使用LiveData从 推送此命令ViewModel。当返回到Fragment相同的命令时,再次按下LiveData并再次触发导航返回,因此看起来没有发生导航。
解决方案正在实施SingleLiveEvent LiveData。它只推动了一次价值。
| 归档时间: |
|
| 查看次数: |
1292 次 |
| 最近记录: |