Android 导航组件单任务启动片段导航
我正在使用导航组件构建我的应用程序。我想在片段导航中实现SingleTask启动模式,我如何实现它 为了更清楚,我将详细说明我的问题 我有一个HomeFragement(让片段a),从中我定义了内部屏幕的操作 片段A>片段B>片段C>片段D 我有一个BaseFragment,它扩展了上面所有的片段,在这些片段中,我使用Android 导航组件单任务启动片段导航,android,android-xml,android-navigation,android-launcher,android-navigation-graph,Android,Android Xml,Android Navigation,Android Launcher,Android Navigation Graph,我正在使用导航组件构建我的应用程序。我想在片段导航中实现SingleTask启动模式,我如何实现它 为了更清楚,我将详细说明我的问题 我有一个HomeFragement(让片段a),从中我定义了内部屏幕的操作 片段A>片段B>片段C>片段D 我有一个BaseFragment,它扩展了上面所有的片段,在这些片段中,我使用findNavController().popBackStack()实现了back click及其操作 在片段D中,当用户按预期单击“后退”按钮时,它将导航回片段C。当我调用了一个
findNavController().popBackStack()实现了back click及其操作
在片段D中,当用户按预期单击“后退”按钮时,它将导航回片段C。当我调用了一个目标片段为片段A的操作时,我的问题就出现了。我在片段D中的一个成功事件上调用此操作,该操作也可以正常工作。但是当用户从片段A按下后退按钮时,它会转到片段C,下一次后退单击会转到片段B,然后下一次后退单击会转到片段A。我应该在片段D中调用的成功事件中销毁片段B和片段C,并应该恢复片段A
我知道,如果启动模式是第一个屏幕(片段A)的SingleTask,而不是片段,则可以实现此流程
我的导航图XML文件
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/app_navigation"
app:startDestination="@id/fragmentA">
<fragment
android:id="@+id/fragmentA"
android:name="FragmentA"
tools:layout="@layout/fragment_a">
<action
android:id="@+id/action_FragmentA_to_FragmentB"
app:destination="@id/dashboardFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/main_nav_graph"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/fragmentB"
android:name="FragmentB"
tools:layout="@layout/fragment_b">
<action
android:id="@+id/action_FragmentB_to_FragmentC"
app:destination="@id/dashboardFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/main_nav_graph"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/fragmentC"
android:name="FragmentC"
tools:layout="@layout/fragment_c">
<action
android:id="@+id/action_fragemntC_to_fragementA"
app:launchSingleTop="true"
app:popUpToInclusive="true"
app:destination="@id/deliveriesFragment" />
</fragment>
</navigation>
但是当用户从片段A按下后退按钮时,它进入片段C,下一次后退单击进入片段B,然后下一次后退单击进入片段A
如果我理解正确,您的片段A是起始目的地,就像主页一样,并且您想要“每当我返回片段A,我单击的下一步返回按钮应退出应用程序”的行为,对吗
如果是这样,尝试将操作
从任何片段添加到片段A,并设置:
app:popUpTo="@id/fragmentA"
app:popUpToInclusive="true" />
应该是这样的:
演示:发布我的工作解决方案,完整的导航脚本,其中包括@Sam Chen的答案
<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/app_navigation"
app:startDestination="@id/fragmentA">
<fragment
android:id="@+id/fragmentA"
android:name="FragmentA"
tools:layout="@layout/fragment_a">
<action
android:id="@+id/action_FragmentA_to_FragmentB"
app:destination="@id/dashboardFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/main_nav_graph"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/fragmentB"
android:name="FragmentB"
tools:layout="@layout/fragment_b">
<action
android:id="@+id/action_FragmentB_to_FragmentC"
app:destination="@id/dashboardFragment"
app:launchSingleTop="true"
app:popUpTo="@+id/main_nav_graph"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/fragmentC"
android:name="FragmentC"
tools:layout="@layout/fragment_c">
<action
android:id="@+id/action_fragemntC_to_fragementA"
app:popUpToInclusive="true"
app:popUpTo="@id/fragmentA" />
</fragment>
</navigation>
你能提供一个有明确目标/期望的具体例子吗?@SamChen我已经添加了代码片段,请看我的编辑,它正在工作,兄弟。。。。所以我把我的解决方案作为一个答案