杀死导航控制器中的片段

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