Android 导航组件NavDeepLinkBuilder后堆栈

Android 导航组件NavDeepLinkBuilder后堆栈,android,navigation,deep-linking,android-architecture-navigation,fragment-backstack,Android,Navigation,Deep Linking,Android Architecture Navigation,Fragment Backstack,从深层链接(通过通知)启动应用程序时,我遇到了后台堆栈问题 总的想法是我有3个片段(A,B,C)。A屏幕用作启动屏幕,因此我将popUpTo和popuptinclusive放在动作中,因此我再也看不到它了。我的深度链接目标是片段C。为了实现正确的后堆栈,我将B和C合并到嵌套导航中。不幸的是,当我按下片段B中的“后退”按钮时,应用程序显示的是片段A。我猜这是因为当应用程序从深度链接本身启动时,从A到B的poputo操作从未被调用。我的问题是:在这个特定场景中,如何避免从B回到A 提前谢谢!我附上示

从深层链接(通过通知)启动应用程序时,我遇到了后台堆栈问题

总的想法是我有3个片段(A,B,C)。A屏幕用作启动屏幕,因此我将
popUpTo
popuptinclusive
放在动作中,因此我再也看不到它了。我的深度链接目标是片段C。为了实现正确的后堆栈,我将B和C合并到嵌套导航中。不幸的是,当我按下片段B中的“后退”按钮时,应用程序显示的是片段A。我猜这是因为当应用程序从深度链接本身启动时,从A到B的
poputo
操作从未被调用。我的问题是:在这个特定场景中,如何避免从B回到A

提前谢谢!我附上示例代码:

<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/nav_graph"
    app:startDestination="@id/splashFragment">

    <fragment
        android:id="@+id/A"
        android:name="A"
        android:label="A" >
        <action
            android:id="@+id/action_A_to_B"
            app:destination="@id/B"
            app:popUpTo="@id/A"
            app:popUpToInclusive="true" />
    </fragment>
    <navigation android:id="@+id/nested_nav"
        app:startDestination="@id/B">
        <fragment
            android:id="@+id/B"
            android:name="B"
            android:label="B">
            <action
                android:id="@+id/action_B_to_C"
                app:destination="@id/C" />
        </fragment>
        <fragment
            android:id="@+id/C"
            android:name="C"
            android:label="C">
        </fragment>
    </navigation>
</navigation>

您已将包含启动屏幕的navGraph设置为默认的startDestination,当您从嵌套的navGraph中按back按钮时,会显示它,我认为最简单的解决方案是执行以下操作: 首先编辑导航文件,使其仅具有一个导航,如:

<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/nav_graph"
    app:startDestination="@id/splashFragment">

    <fragment
        android:id="@+id/A"
        android:name="A"
        android:label="A" >
        <action
            android:id="@+id/action_A_to_B"
            app:destination="@id/B"
            app:popUpTo="@id/A"
            app:popUpToInclusive="true" />
    </fragment>
    <fragment
            android:id="@+id/B"
            android:name="B"
            android:label="B">
            <action
                android:id="@+id/action_B_to_C"
                app:destination="@id/C" />
        </fragment>
        <fragment
            android:id="@+id/C"
            android:name="C"
            android:label="C">
        </fragment>
</navigation>
重写onDestinationChangedListener()方法并检查即将显示的片段是否为,然后完成应用程序,如下所示:

@override 
public void onDestinationChanged(NavController controller, NavDestination destination, Bundle arguments){
if(destination.getId()==R.id.splashFragmentId){
finish();
}
}
yourNavController.setOnDestinationChangedListener(this);
@override 
public void onDestinationChanged(NavController controller, NavDestination destination, Bundle arguments){
if(destination.getId()==R.id.splashFragmentId){
finish();
}
}