杀死导航控制器中的片段
Kill fragment in navigation controller
我的片段流是这样的
Main -> A -> B -> C ->A
在片段 c 中,它有一个提交按钮,它将 return 提交给 A。
当我按下 A 中的后退按钮时,我希望它返回 Main。但它 return 将 c 分段。
在片段 C 中,我使用这个
findNavController().navigate(R.id.action_c_to_a)
nav_graph.xml
<fragment
android:id="@+id/fragmentC"
android:name="xxx"
android:label="xxx">
<action
app:launchSingleTop="true"
app:popUpTo="@+id/fragmentA"
app:popUpToInclusive="true"
android:id="@+id/action_c_to_a"
app:destination="@id/fragmentA" />
</fragment>
为什么不弹出片段A?您可以只调用 findNavController().popBackStack(R.id.fragmentA, false)
而不是通过操作进行导航。
尝试使用来自 backstack 的 removing/killing 片段查看我的完整解决方案。
Navigation Component set transition animation programmatically
您可以覆盖后退按钮行为来执行此操作。
Provide custom back navigation
想法是设置一个app:popUpTo
而不设置app:destination
。事实上,设置 app:destination
将创建一个片段并将其添加到后台堆栈,这不是您想要的。
你可以删除:
app:destination="@id/fragmentA"
如果你有这个:
app:popUpTo="@+id/fragmentA"
它会真正弹出后台堆栈,直到 fragmentA
我的片段流是这样的
Main -> A -> B -> C ->A
在片段 c 中,它有一个提交按钮,它将 return 提交给 A。 当我按下 A 中的后退按钮时,我希望它返回 Main。但它 return 将 c 分段。
在片段 C 中,我使用这个
findNavController().navigate(R.id.action_c_to_a)
nav_graph.xml
<fragment
android:id="@+id/fragmentC"
android:name="xxx"
android:label="xxx">
<action
app:launchSingleTop="true"
app:popUpTo="@+id/fragmentA"
app:popUpToInclusive="true"
android:id="@+id/action_c_to_a"
app:destination="@id/fragmentA" />
</fragment>
为什么不弹出片段A?您可以只调用 findNavController().popBackStack(R.id.fragmentA, false)
而不是通过操作进行导航。
尝试使用来自 backstack 的 removing/killing 片段查看我的完整解决方案。
Navigation Component set transition animation programmatically
您可以覆盖后退按钮行为来执行此操作。 Provide custom back navigation
想法是设置一个app:popUpTo
而不设置app:destination
。事实上,设置 app:destination
将创建一个片段并将其添加到后台堆栈,这不是您想要的。
你可以删除:
app:destination="@id/fragmentA"
如果你有这个:
app:popUpTo="@+id/fragmentA"
它会真正弹出后台堆栈,直到 fragmentA