【问题标题】:Intended usage of Up navigation向上导航的预期用途
【发布时间】:2014-04-18 20:24:32
【问题描述】:

我的应用是基于 Activity 的,并且有多个级别,即 ActivityA 具有启动 ActivityB 的操作,而后者又启动 ActivityC。从 ActivityC 按下“返回”返回到 ActivtyB,然后从那里返回返回到 ActivityA,正如您所期望的那样。

在我的 ActionBar 中,我启用了 Home 图标,以便它显示向上导航箭头。我希望它以与“后退”按钮相同的方式工作,但从 ActivityC 中单击“向上”仍会将我返回到 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 吗?向上图标是否应该始终让您返回主要活动? 2) 为什么我的实现没有按预期工作?

【问题讨论】:

    标签: android android-actionbar


    【解决方案1】:

    1) 不,您不是想在这里滥用 ActionBar。如果您从 A -> B -> 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.

    中所述

    更好的方法是在子 Activity 中手动处理 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 级别。

    【讨论】:

      猜你喜欢
      • 2014-11-11
      • 2023-04-04
      • 2014-02-27
      • 2012-09-23
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多