【问题标题】:How to avoid fragment recreation using navigation architecture component?如何避免使用导航架构组件重新创建片段?
【发布时间】:2020-09-26 11:32:12
【问题描述】:

我的抽屉里有 4 个片段,我们称它们为片段 A、B、C、D。我使用导航架构将我的片段与抽屉绑定。

片段 A 是我的入口点,从那里我可以在抽屉的任何地方导航。

假设我走路径A > B > C > B > C

如果我从 C 向后按,它会转到 B,然后再转到 C,然后再转到 B,最后再转到 A,但我不希望这样。

当我从 C 按下后退按钮时,我希望它只返回到 B 然后 A 而不会重新创建已经在返回堆栈中的片段。有人可以帮忙解决这个问题吗?

【问题讨论】:

  • 然后停止使用片段和导航拱......并根据视图制作你自己的......这就是片段的工作方式,你对此无能为力

标签: android kotlin navigation-drawer android-architecture-navigation back-stack


【解决方案1】:

当我从 C 按下返回按钮时,我希望它返回到 B 然后 A 没有重新创建已经在后面的片段 堆栈。

当您导航到目的地时,您可以从返回堆栈中弹出目的地的旧实例。只需将 pop 包含在导航图中的所有 action 中。

<!-- Add this in the actions navigating to B -->
app:popUpTo="@id/B" 
app:popUpToInclusive="true"

说明

上述弹出行为的作用是,当您从 C > B 导航时,它会从后面的堆栈中弹出所有内容直到 B(包括)并添加 B 的最新实例在后台堆栈上。

A > B > C > B > C 会有一个回栈:

A
A, B
A, B, C
A, B
A, B, C

注意: 这里的固有假设是,这在您的示例中不是有效的情况。 A > B > C > D > B > C 导致 C > B > D > A 的回溯。请注意,在上述解决方案中,当您导航到第二个 B 时,它也会从您的回栈中弹出 D!

【讨论】:

  • 我同意你的观点,除了在抽屉中使用导航组件没有与之相关的操作。抽屉自己做片段切换
猜你喜欢
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2020-07-14
  • 2021-12-27
  • 1970-01-01
  • 2019-03-29
  • 2019-04-25
  • 2017-12-21
相关资源
最近更新 更多