Android Parent Activity 历史堆栈问题

Android Parent Activity History Stack Issue

想象一下这个 activity 历史堆栈:

A > B > C > D

A 是 parent 到 B

B 是 parent 到 D

C 可选

如果我这样设置 parents 并按顺序导航,就向后导航(向上与向后)而言,一切都按我需要的方式工作:

前进 : A > B > C > D

: D > B > A

返回 : D > C > B > A

但是,如果我跳过 B...

前进 : A > D

向上 : D > A - 为什么D不启动B,就像D > B > A一样,坚持清单parent ?

返回 : D > A

我需要在应用启动时合成一个返回栈吗?

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.worked.navigation_flow">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity
            android:name=".A"
            android:label="A">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".B"
            android:label="B"
            android:parentActivityName=".A" />
        <activity
            android:name=".C"
            android:label="C" />
        <activity
            android:name=".D"
            android:label="D" 
            android:parentActivityName=".B"/>
    </application>
</manifest>

Activity 向上按钮

public void onUp(View view) {
    NavUtils.navigateUpFromSameTask(this);
}

如您所见,navigateUpFromSameTask 仅尝试在同一个任务中找到父级,但是在您的情况下 A > D,B 未创建,因此不在任务中,并且不会创建并启动父项。

为此,您可以在从 A 调用 D 时使用 TaskStackBuilder

TaskStackBuilder.create(this)
                    // add all of DetailsActivity's parents to the stack,
                    // followed by DetailsActivity itself
                    .addNextIntentWithParentStack(new Intent(this, D.class))
                    .startActivities();