禁止在导航架构组件中将片段添加到后台堆栈
Disable adding fragment to backstack in Navigation Architecture Component
假设我有 4 个片段:A、B、C、X,我可以通过这种方式在它们之间导航:
... -> A -> C -> X and ... -> B -> C -> X
但是当我在片段 X 调用时 mNavController.navigateUp()
我想跳过片段 C 并转到片段 A 或 B。我需要做什么?
更新:我只需要导航架构组件的解决方案https://developer.android.com/topic/libraries/architecture/navigation/
谢谢!
鉴于 R.id.fragmentC
是 C 目的地的名称,从 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);
这将专门弹出到 fragmentA/fragmentB,我认为这是最适合您自己和其他人理解的描述方式。
或者,您可以在导航 xml
资源中使用 app:popUpTo
和 app: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>
假设我有 4 个片段:A、B、C、X,我可以通过这种方式在它们之间导航:
... -> A -> C -> X and ... -> B -> C -> X
但是当我在片段 X 调用时 mNavController.navigateUp()
我想跳过片段 C 并转到片段 A 或 B。我需要做什么?
更新:我只需要导航架构组件的解决方案https://developer.android.com/topic/libraries/architecture/navigation/ 谢谢!
鉴于 R.id.fragmentC
是 C 目的地的名称,从 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);
这将专门弹出到 fragmentA/fragmentB,我认为这是最适合您自己和其他人理解的描述方式。
或者,您可以在导航 xml
资源中使用 app:popUpTo
和 app: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>