更新:
当你有这样的导航图时:
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"/>
并且您想导航到第二个片段并使其成为图表的根,请指定下一个NavOptions
:
NavOptions navOptions = new NavOptions.Builder()
.setPopUpTo(R.id.firstFragment, true)
.build();
并将它们用于导航:
Navigation.findNavController(view).navigate(R.id.action_firstFragment_to_secondFragment, bundle, navOptions);
setPopUpTo(int destinationId, boolean inclusive)
- 在导航之前弹出到给定的目的地。这会从返回堆栈中弹出所有不匹配的目标,直到找到该目标。
destinationId
- 要弹出的目的地,清除所有干预目的地。
inclusive
- true 也从返回堆栈中弹出给定的目的地。
选择:
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:popUpTo="@+id/firstFragment"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"/>
然后在您的代码上:
findNavController(fragment).navigate(
FirstFragmentDirections.actionFirstFragmentToSecondFragment())
旧答案
已弃用:操作的clearTask
属性和相关的 APINavOptions
已被弃用。
来源:https ://developer.android.com/jetpack/docs/release-notes
如果您想将根片段更改为fragment 2
(例如,按下后退按钮后fragment 2
您将退出应用程序),您应该将下一个属性放入您的action
or destination
:
app:clearTask="true"
实际上,它看起来像下一个方式:
<fragment
android:id="@+id/firstFragment"
android:name="com.appname.package.FirstFragment"
android:label="fragment_first" >
<action
android:id="@+id/action_firstFragment_to_secondFragment"
app:destination="@id/secondFragment"
app:clearTask="true" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.appname.package.SecondFragment"
android:label="fragment_second"/>
我已经加入app:clearTask="true"
行动。
现在,当您执行导航fragment 1
以fragment 2
使用下一个代码时:
Navigation.findNavController(view)
.navigate(R.id.action_firstFragment_to_secondFragment);