Android父活动历史堆栈问题

时间:2015-09-07 03:22:01

标签: android android-activity android-manifest

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

A> B> C> d

A是B的父母

B是D的父母

C是可选的

如果我按照这样设置父母并按顺序导航,那么一切都按照我需要的方式向后导航(Up to Back):

转发:A> B> C> d

向上:D> B>甲

返回:D> C> B>甲

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

转发:A> d

向上:D> A - 为什么不启动B,如D> B> A,坚持明显的父母?

返回:D>甲

我是否需要在app start处合成后台堆栈?

的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>

活动上升按钮

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

1 个答案:

答案 0 :(得分:1)

正如您所看到的,navigateUpFromSameTask只是尝试在同一个任务中找到父级,但是在您的情况下,A&gt; 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();