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();
想象一下这个 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();