0

操作栏中的向上导航设置简单,并且在 Jelly Bean 上正常工作:

ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

对于 AndroidManifest 中的那个活动

android:parentActivityName=".MainActivity"

但该属性android:parentActivityName在 ICS (4.0.3) 上不可用。Android 文档对于如何在 ICS 上使用它非常含糊,说

要使用支持库支持旧设备,还需要包含一个 <meta-data> 元素,该元素将父活动指定为 android.support.PARENT_ACTIVITY 的值。

...我做到了,但是支持库是什么?我遵循了http://developer.android.com/tools/support-library/setup.html上的支持库设置指南,但是......它仍然不能使该死的向上按钮在我的 ICS 应用程序中工作。这么小的事情,为什么要搞得这么复杂?

4

3 回答 3

0

你可以做NKijak回答的事情。

另一种方法是在子活动中手动处理 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 级别都按预期工作(恢复 ParentActivity 而不是重新创建它)。

于 2014-04-17T18:25:09.347 回答
0

我也遇到了这个问题,最后得到了一个稍微不同的解决方案。

在我的应用程序的每个屏幕上,我都会添加一个菜单,即使该屏幕上没有菜单选项:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setHasOptionsMenu(true);
}


@Override
public void onCreateOptionsMenu (Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
}

上面的代码设置了一个菜单,但从不膨胀。

然后,我显式地将向上导航设置为指向特定的类。注意android.R.id.home的使用:

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    Intent i = null;

    switch (item.getItemId())
    {
        case android.R.id.home:
            i = new Intent(getActivity(), DesiredActivity.class);
            startActivityForResult(i, 0);
            break;
        default:
            break;
    }
    return true;
}

我已经在 Android 版本 4.0.3、4.0.4、4.4.2 上对此进行了测试,并且可以正常工作。

于 2014-03-07T21:01:18.213 回答
0

您正在扩展Activity而不是android.support.v7.app.ActionBarActivity.

然后使用getSupportActionBar()而不是getActionBar().

于 2014-03-04T16:18:05.030 回答