Up导航的预期用途

时间:2014-02-01 12:32:09

标签: android android-actionbar

我的应用程序是基于活动的,有几个级别,即ActivityA有动作启动ActivityB,后者又启动ActivityC。从ActivityC按“返回”返回ActivtyB,然后返回到返回ActivityA,正如您所期望的那样。

在我的ActionBar中,我启用了Home图标,以便显示向上导航箭头。我打算以与Back按钮相同的方式工作,但是从ActivityC单击Up仍然会将我返回到ActivityA,即使我已将以下内容添加到清单中:

<activity android:name=".activity.ActivityC"
    android:parentActivityName=".activity.ActivityB">
        <!-- Parent activity meta-data to support API level 7+ -->
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activity.ActivityB" />
</activity>

两个问题:

1)我是否试图在这里滥用ActionBar? Up图标是否始终返回主活动? 2)为什么我的实现不能像我预期的那样工作?

1 个答案:

答案 0 :(得分:2)

1)不,你不是想在这里滥用ActionBar。如果你要去A - &gt; B - &gt; C然后从C按下Up应该带你到B而不是A.这被称为here

  

“向上”按钮用于根据屏幕之间的层次关系在应用内导航。例如,如果屏幕A显示项目列表,则选择项目会显示屏幕B(更详细地显示该项目) ),然后屏幕B应该提供一个返回屏幕A的向上按钮。“

2)您的实施工作无法按预期运行,因为您忘记按照here所述执行以下操作:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_displaymessage);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        // If your minSdkVersion is 11 or higher, instead use:
        // getActionBar().setDisplayHomeAsUpEnabled(true);
    }

但是我不建议您使用上述技术来处理您的向上导航,因为上述方法不适用于ICS及以下。它不起作用的原因是因为NavUtils对Pre JellyBean和Post JellyBean的行为不同,如SO.

中所述。

更好的方法是在子活动中手动处理Up操作:

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            startActivity(new Intent(this, ParentActivity.class)
                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|
                          Intent.FLAG_ACTIVITY_SINGLE_TOP));
        default:
            return super.onOptionsItemSelected(item);
    }
}

本手册方法的最佳部分是适用于所有Api级别。