在导航控制器中杀死片段

时间:2019-06-25 07:12:32

标签: android kotlin navigation fragment navigationcontroller

我的片段流是这样的

Main -> A -> B -> C ->A

在片段c中,它具有一个提交按钮,该按钮将返回到A。 当我按A中的后退按钮时,我希望它返回到Main。但是它返回片段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>

5 个答案:

答案 0 :(得分:6)

为什么不弹出片段A?您可以只调用findNavController().popBackStack(R.id.fragmentA, false)而不用导航操作。

答案 1 :(得分:0)

尝试查看我的完整解决方案,其中包含从后堆栈中删除/杀死片段。

Navigation Component set transition animation programmatically

答案 2 :(得分:0)

您可以重写后退按钮的行为来执行此操作。 Provide custom back navigation

答案 3 :(得分:0)

在操作标签内的 nav_graph 内添加此内容

app:popUpTo="@id/homeFragment"

见:Not able to destroy fragment from Nav Controller in Android

答案 4 :(得分:-1)

使用以下代码从后堆栈中删除片段:

FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove(myFrag);
trans.commit();
manager.popBackStack();