如何清除导航组件中的片段堆栈?

时间:2019-06-17 08:50:52

标签: android android-fragments android-navigation

我曾用FragmentManager尝试过:

insert

并尝试使用Navigation.findNavController(mView).popBackStack()

FragmentManager

1。

val fm = activity!!.supportFragmentManager

2。

fm.popBackStack()

但是他们没有工作。我的意思是,似乎他们弹出了所有片段。

我还尝试在fm.popBackStackImmediate() 中应用这些属性:

graph_nav.xml

我在A片段和B片段中应用了它们。

我想从A片段转到B片段。而且我想清除B片段之前的所有片段堆栈,而只留下B片段。

1 个答案:

答案 0 :(得分:0)

您需要将app:popUpToInclusive="true"app:launchSingleTop="true"app:popUpTo="nav_graph_id"添加到nav_graph.xml中的操作标记。

<fragment
android:id="@+id/firstFragment"
android:name="com.example.ui.FirstFragment"
android:label="First"
tools:layout="@layout/fragment_first" >
<action
    android:id="@+id/clearBackStack"
    app:destination="@id/secondFragment"
    app:launchSingleTop="true"
    app:popUpTo="@+id/nav_graph"
    app:popUpToInclusive="true" /></fragment>

然后构建项目(以便创建路线文件),并编写以下代码:

findNavController().navigate(FirstFragmentDirections.clearBackStack())

即使您有几个nav_graph,也要设置主/家庭nav_graph的popUpTo的ID,而不是您编写此操作的ID。您的主要nav_graph是“ main_nav_graph.xml”,然后在“ some_other_nav_graph.xml”中编写以上代码,并设置main_nav_graph.xml的ID。

相关问题