使用actionbar home作为向上按钮,home活​​动saveInstanceState始终为null

时间:2013-05-08 06:53:10

标签: android android-actionbar

活动A ===点击按钮===>活动B

按下后退按钮时,不会重新创建活动A.

按home键作为向上按钮时,将重新创建活动A.

所以我在A.onSaveInstanceState(Bundle outState)时保存状态 ,并在A.onRestoreInstanceState(Bundle savedInstanceState)时使用状态。

保存和使用工作正常(除了主页作为向上按钮)

然而,

当按下向上按钮时, 系统重新创建活动A,并且savedInstanceState消失了。

如何使用已保存的实例状态?

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
        // I do not want this... 
        // Home as up button is to navigate to Home-Activity not previous acitivity
            super.onBackPressed();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

3 个答案:

答案 0 :(得分:53)

在onCreate()中启用主页按钮。

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}

在onOptionItemSelected()方法中执行此操作。

@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);
}

这应启用向上导航。如果希望使用savedInstanceState还原父活动。您应该在清单文件中的父活动中设置launchMode="singleTop"

有关详细信息,请查看http://developer.android.com/: Providing Up Navigation

答案 1 :(得分:28)

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

我使用了结束() NavUtils ;

答案 2 :(得分:0)

正如@Joachim 在评论中提到的,R.id.homeandroid.R.id.home 之间存在差异。就我而言,我一直在使用 R.id.home,但它不起作用,而 android.R.id.home 确实起作用。