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

How to clear back stack of Fragments in Navigation Component?

提问人:c-an 提问时间:6/17/2019 更新时间:6/17/2019 访问量:19356

问:

我尝试过像这样使用 FragmentManager:

Navigation.findNavController(mView).popBackStack()

并尝试使用 .FragmentManager

val fm = activity!!.supportFragmentManager

1.

fm.popBackStack()

2.

fm.popBackStackImmediate()

但他们没有奏效。我的意思是,他们似乎把所有的碎片都弹出来了。

我还尝试在以下位置应用这些属性:graph_nav.xml

app:launchSingleTop="true"
app:popUpToInclusive="true"

我将它们应用于 A 片段和 B 片段中。

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

安卓 导航

评论


答:

10赞 Grigoriym 6/17/2019 #1

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

<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_graphs,也要设置 main/home nav_graph的 popUpTo 的 id,而不是你编写此操作的 id,例如你的主nav_graph是 “main_nav_graph.xml”,你把上面的代码写在 “some_other_nav_graph.xml” 中,设置main_nav_graph.xml的 id。

评论

0赞 StayCool 2/19/2020
我没有 nav_graph.id。我应该创建 <action> 标签并将 id 放在 navgraph 的根目录下吗?
0赞 Fazal Hussain 5/18/2020
如果你只有一个片段,没有行动,我们该怎么办?