Android 被ActionBar向上导航弄糊涂了

Android 被ActionBar向上导航弄糊涂了,android,android-actionbar,android-support-library,Android,Android Actionbar,Android Support Library,我正在尝试基于Android设计指南()实现ActionBar UP导航 对于大多数用例来说,这很简单,但假设我有一个名为Activity2A的活动,可以通过两条不同的路径访问我的用户: 主活动->活动1a->活动2a 主活动->活动1b->活动2a Activity2A的逻辑父级是Activity1A,因此从Activity2A向上导航时应该启动它。我根据官方教程在清单中设置了以下内容: 如果我在第一个路径上导航到Activity2A,它就可以正常工作(因此它的逻辑父级已经在Activit

我正在尝试基于Android设计指南()实现ActionBar UP导航

对于大多数用例来说,这很简单,但假设我有一个名为Activity2A的活动,可以通过两条不同的路径访问我的用户:

主活动->活动1a->活动2a

主活动->活动1b->活动2a

Activity2A的逻辑父级是Activity1A,因此从Activity2A向上导航时应该启动它。我根据官方教程在清单中设置了以下内容:

如果我在第一个路径上导航到Activity2A,它就可以正常工作(因此它的逻辑父级已经在Activity堆栈上)。但是使用第二条路径,单击向上按钮会将我带到MainActivity(根),而不是Activity1A(逻辑父级)。我正在Android 4.2上测试这段代码


我做错了什么

你在安卓4.0或2.3上也有同样的问题吗?没有,在4.1以下的所有版本上,它的工作方式实际上完全不同。当堆栈看起来像MainActivity->Activity1B->Activity2A时,我按下UP键,它将是MainActivity->Activity1B->Activity1A。所以Activity2A被它的父代替换了,这增加了我的困惑。同样的事情也发生在我身上,看起来它是安卓4.1+上的一个bug(它的新版本),在support Libcheck上运行良好。检查这个答案以获得解决方案谢谢,这就解决了问题!
<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Sherlock.Light" >

    <!-- Main menu -->
    <activity
        android:name="hu.scythe.upnavigation.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <!-- Level 1 -->
    <activity
        android:name="hu.scythe.upnavigation.Activity1A"
        android:label="@string/title_activity_activity1"
        android:parentActivityName="hu.scythe.upnavigation.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="hu.scythe.upnavigation.MainActivity" />
    </activity>
    <activity
        android:name="hu.scythe.upnavigation.Activity1B"
        android:label="@string/title_activity_activity1_b"
        android:parentActivityName="hu.scythe.upnavigation.MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="hu.scythe.upnavigation.MainActivity" />
    </activity>

    <!-- Level 2 -->
    <activity
        android:name="hu.scythe.upnavigation.Activity2A"
        android:label="@string/title_activity_activity2"
        android:parentActivityName="hu.scythe.upnavigation.Activity1A" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="hu.scythe.upnavigation.Activity1A" />
    </activity>
</application>
@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        // Respond to the action bar's Up/Home button
        case android.R.id.home:
            Intent upIntent = NavUtils.getParentActivityIntent(this);
            if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                // This activity is NOT part of this app's task, so create a new
                // task
                // when navigating up, with a synthesized back stack.
                TaskStackBuilder.create(this)
                // Add all of this activity's parents to the back stack
                        .addNextIntentWithParentStack(upIntent)
                        // Navigate up to the closest parent
                        .startActivities();
            } else {
                // This activity is part of this app's task, so simply
                // navigate up to the logical parent activity.
                NavUtils.navigateUpTo(this, upIntent);
            }
            return true;
        }
        return super.onOptionsItemSelected(item);
    }