导航到 Jetpack Navigation 中的另一个 Fragment 后将 DialogFragment 保留在 backstack 中

Posted

技术标签:

【中文标题】导航到 Jetpack Navigation 中的另一个 Fragment 后将 DialogFragment 保留在 backstack 中【英文标题】:Keeping DialogFragment in backstack after navigation to another Fragment in Jetpack Navigation 【发布时间】:2021-09-16 07:50:42 【问题描述】:

我正在为应用程序中的对话框使用 Jetpack Navigation。基本上,我正在使用生成的操作方法从 DialogFragment 导航到另一个片段。但是,当我在导航的 Fragment 中按下返回按钮或调用 findNavController().popBackStack() 时,它不会导航回 DialogFragment,而是将我带回到打开 DialogFragment 的原始 Fragment。有没有办法将 DialogFragment 保留在后台堆栈中,而无需任何解决方法,例如在我返回后立即手动再次显示对话框。

先谢谢了。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,使用下面的代码,我可以在导航的Fragment中调用findNavController().popBackStack(),但是我不能回到打开DialogFragment的原始Fragment(Activity)。

dialog.setOnKeyListener  dialog, keyCode, event ->
    if (keyCode == KeyEvent.KEYCODE_BACK)
      this.binding.navHost.findNavController().navigateUp()
      return@setOnKeyListener true
    else
      return@setOnKeyListener false
    
  

【讨论】:

以上是关于导航到 Jetpack Navigation 中的另一个 Fragment 后将 DialogFragment 保留在 backstack 中的主要内容,如果未能解决你的问题,请参考以下文章

JetPack架构---Navigation的使用

如何在 JetPack Navigation 组件中托管 Fragment 的 Activity 中调用导航 Fragments 函数?

Jetpack Compose Navigation - 底部导航多个返回堆栈 - 查看模型范围问题

Jetpack学习-Navigation

Jetpack Navigation 实现自定义 View 导航

Android Jetpack导航组件——Navigation的使用