提问人:c-an 提问时间:6/17/2019 更新时间:6/17/2019 访问量:19356
如何清除导航组件中的片段后退堆栈?
How to clear back stack of Fragments in Navigation Component?
问:
我尝试过像这样使用 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
如果你只有一个片段,没有行动,我们该怎么办?
评论