从Android中的Actionbar导航

时间:2014-03-10 07:54:14

标签: android android-actionbar

在我的Android应用中,我在操作栏上使用向上导航图标。 在我的孩子活动中,我已经设置了

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

在清单中我已经设置了

<activity
        android:name="app.sclms.UserAccount"
        android:label="@string/app_name"
        android:parentActivityName="app.sclms.MainMenu">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="app.sclms.MainMenu" />

</activity>

但每当我点击向上图标时,我的应用程序就会退出。

这里缺少什么,我不明白。

2 个答案:

答案 0 :(得分:1)

请阅读此部分:http://developer.android.com/training/implementing-navigation/ancestral.html#NavigateUp

具体来说,添加以下代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    // Respond to the action bar's Up/Home button
    case android.R.id.home:
        NavUtils.navigateUpFromSameTask(this);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

答案 1 :(得分:-1)

但是我不建议使用navigateUpFromSameTask,因为它会导致重新创建ParentActivity,而不是在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);
    }
}

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