UPDATE:
当你有这样的导航图时:
<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())
旧答案
已弃用: The clearTask
操作属性和相关 APINavOptions
已被弃用。
Source: https://developer.android.com/jetpack/docs/release-notes 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
to fragment 2
使用下一个代码:
Navigation.findNavController(view)
.navigate(R.id.action_firstFragment_to_secondFragment);