Android父活动历史记录堆栈问题

Android父活动历史记录堆栈问题,android,android-activity,android-manifest,Android,Android Activity,Android Manifest,想象一下这个活动历史堆栈: A>B>C>D A是B的父母 B是D的父母 C是可选的 如果我将父项设置为这样并按顺序导航,则在向后导航(向上或向后)方面,一切都会按照我需要的方式工作: 前进:A>B>C>D 向上:D>B>A 返回:D>C>B>A 然而,如果我跳过B 向前:A>D Up:D>A-为什么D不像D>B>A那样启动B,并依附于清单父项? 返回:D>A 我是否需要在应用程序启动时合成一个后台堆栈 AndroidManifest.xml <manifest xmlns:android=

想象一下这个活动历史堆栈:

A>B>C>D

A是B的父母

B是D的父母

C是可选的

如果我将父项设置为这样并按顺序导航,则在向后导航(向上或向后)方面,一切都会按照我需要的方式工作:

前进:A>B>C>D

向上:D>B>A

返回:D>C>B>A

然而,如果我跳过B

向前:A>D

Up:D>A-为什么D不像D>B>A那样启动B,并依附于清单父项?

返回: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>

正如您所看到的,
navigateUpFromSameTask
仅尝试在同一任务中查找父任务,但是在案例A>D中,B未创建,因此不在任务中,它不会创建并启动父任务

要做到这一点,可以在从数据库调用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();

尝试在application元素下添加android:noHistory=“false”。。。我只是深入研究了这些文件,自己也发现了这一点。非常方便!我还向github添加了一个示例项目:
TaskStackBuilder.create(this)
                    // add all of DetailsActivity's parents to the stack,
                    // followed by DetailsActivity itself
                    .addNextIntentWithParentStack(new Intent(this, D.class))
                    .startActivities();