【问题标题】:Android Navigation - Popping the current fragment when navigatingAndroid Navigation - 导航时弹出当前片段
【发布时间】:2021-12-23 16:58:15
【问题描述】:

我有一个可以从我的应用程序中的任何位置动态导航到的片段,但是,当用户离开这个片段时,它不应该被添加到后台堆栈中。

例如如果用户在片段 A 并导航到该片段 (B),然后导航到片段 C,当他们点击返回时,他们应该到达片段 A 而不是片段 B。


我尝试在片段 B 中调用以下内容:

findNavController().navigate(
   resId = R.id.C, 
   navOptions = NavOptions.Builder()
       .setPopUpTo(R.id.B, inclusive = true)
       .build()
)

但是,这不起作用。此外,我不能从片段 B 中调用它:

findNavController().navigate(
   resId = R.id.C, 
   navOptions = NavOptions.Builder()
       .setPopUpTo(R.id.A, inclusive = false) // this line is different
       .build()
)

因为 B 不知道它的前任是什么。


或者,我不能在 C 中调用类似这样的东西来返回导航:

findNavController().popBackStack(R.id.A, inclusive = false)

或类似 C 中的片段创建:

findNavController().popBackStack()

因为 C 不一定知道它的前任是什么时候。


为了使这更加困难,由于我的应用程序内部的原因,我不能在片段 B 中调用 navigateBack() 然后再 navigate()。

我相信如果我要检查后台堆栈并添加一些动态调用,这可能是可能的,但是,这感觉像是一个 hacky 解决方案。

有什么巧妙的方法可以做到这一点吗?

【问题讨论】:

    标签: android android-fragments android-navigation android-jetpack-navigation


    【解决方案1】:

    我尝试在片段 B 中调用以下内容:

    findNavController().navigate(
       resId = R.id.C, 
       navOptions = NavOptions.Builder()
           .setPopUpTo(R.id.B, inclusive = true)
           .build()
    )
    

    这个解决方案应该正常工作,我的应用程序中有一个内部错误阻止 navOptions 到达 navigate() 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多