37

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

当按下返回按钮时,不会重新创建活动 A。

当按主页作为向上按钮时,将重新创建活动 A。

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

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

.

然而,

当按下 home 作为向上按钮时,系统重新创建 Activity 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);
    }
4

3 回答 3

60

在 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/:提供向上导航

于 2013-10-05T13:03:42.740 回答
32
@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);
}

我使用了 finish()而不是NavUtils

于 2014-10-04T16:49:11.617 回答
0

R.id.home正如@Joachim 在评论中提到的那样,和之间有区别android.R.id.home。就我而言,我一直在使用R.id.home,它没有用,但android.R.id.home确实有效。

于 2021-07-29T15:22:00.933 回答