Navigation Components跳转后如何销毁前序Fragment实现类似Activity finish()效果
解决方法
你可以通过配置Navigation跳转时的回退栈弹出规则实现该效果,有两种常用实现方式:
方式1:修改nav_graph配置(推荐)
给你定义的跳转action新增app:popUpTo和app:popUpToInclusive属性即可,修改后的配置参考如下:
<navigation> <fragment android:id="@+id/fragmentone" android:name="你的FragmentOne全类名"> <action android:id="@+id/action_to_fragmenttwo" app:destination="@id/fragmenttwo" <!-- 新增以下两个属性 --> app:popUpTo="@id/fragmentone" app:popUpToInclusive="true" /> </fragmentone> <fragment android:id="@+id/fragmenttwo" android:name="你的FragmentTwo全类名"> </fragmenttwo> </navigation>
属性说明:
app:popUpTo="@id/fragmentone":跳转时会弹出回退栈中直到FragmentOne的所有页面app:popUpToInclusive="true":指定连FragmentOne本身也一起弹出回退栈
配置完成后跳转至FragmentTwo,回退栈里就不会保留FragmentOne的实例,点击返回按钮会直接退出当前Activity,和Activity跳转时调用finish()的效果完全一致。
方式2:代码跳转时动态配置
如果不想修改xml配置,也可以在跳转时传入对应的NavOptions参数:
Kotlin示例
val navOptions = NavOptions.Builder() .setPopUpTo(R.id.fragmentone, true) .build() findNavController().navigate(R.id.action_fragmentone_to_fragmenttwo, null, navOptions)
Java示例
NavOptions navOptions = new NavOptions.Builder() .setPopUpTo(R.id.fragmentone, true) .build(); Navigation.findNavController(requireView()).navigate(R.id.action_fragmentone_to_fragmenttwo, null, navOptions);
注意:上述代码和配置中的
fragmentone需要和你nav_graph里第一个Fragment声明的android:id值保持一致。
内容的提问来源于stack exchange,提问作者Rocket Dev
相关产品推荐
相关产品推荐

