Android - 在ICS上的ActionBar中启动导航

时间:2013-09-10 16:05:29

标签: android android-actionbar

操作栏中的向上导航很容易设置并在Jelly Bean上正常工作:

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

以及AndroidManifest中的该活动

android:parentActivityName=".MainActivity"

但ICS(4.0.3)上没有属性android:parentActivityName

表示,Android文档对于如何在ICS上使用它非常模糊
  

要支持具有支持库的旧设备,还要包含<元数据> element,指定父活动为android.support.PARENT_ACTIVITY的值。

...我做了,但这是关于支持库的呢?我按照http://developer.android.com/tools/support-library/setup.html上的支持库设置指南进行了操作,但是......它仍然没有让我该应用程序在ICS上运行该死的按钮。这是一件小事,为什么它必须如此疯狂地复杂化?

3 个答案:

答案 0 :(得分:0)

您正在延长Activity而不是android.support.v7.app.ActionBarActivity

然后使用getSupportActionBar()代替getActionBar()

答案 1 :(得分: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上对此进行了测试,但它确实有用。

答案 2 :(得分: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);
    }
}

本手册方法的最佳部分是它可以按预期工作(恢复ParentActivity而不是重新创建它)适用于所有API级别。