禁用在导航体系结构组件中向后退堆栈添加片段



假设我有 4 个片段:A、B、C、X,我可以这样在它们之间导航:

... -> A -> C -> X    and ... -> B -> C -> X

但是当我在片段 X 调用mNavController.navigateUp()时,我想跳过片段 C 并转到片段 A 或 B。我需要做什么?

UPD:我只需要导航架构组件 https://developer.android.com/topic/libraries/architecture/navigation/的解决方案 谢谢!

或者,您可以在导航xml资源中使用app:popUpToapp:popUpToInclusive属性在执行某些事务时自动清理后退堆栈,因此"后退/向上"按钮会将用户带到根片段。

<fragment
android:id="@+id/fragment1"
android:name="com.package.Fragment1"
android:label="Fragment 1">
<action
android:id="@+id/action_fragment1_to_fragment2"
app:destination="@id/fragment2"
app:popUpTo="@id/fragment1"
app:popUpToInclusive="true / false" />
</fragment>

给定 C 目标的名称R.id.fragmentC,从 X 目标,您可以执行以下操作:

NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentC, true);

这应该将所有目标从堆栈中弹出,直到 C 之前,并将 A 或 B 保留在堆栈顶部。

正如@bentesha所提到的,它以这种方式工作,它将弹出片段,直到包含 fragmentC。

您也可以按如下方式实现此目的:

NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentA, false);

NavController controller = Navigation.findNavController(view);
controller.popBackStack(R.id.fragmentB, false);

这将专门弹出片段A/片段B,我认为这是你自己和其他人理解的最描述性的方式。

最新更新