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

Cha*_*gUZ 34 android android-actionbar

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

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

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

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

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

.

然而,

当按下home作为向上按钮时,系统重新创建活动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);
    }
Run Code Online (Sandbox Code Playgroud)

Aeg*_*gis 54

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

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)

在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);
}
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请访问http://developer.android.com/:提供导航

  • 这对我来说适用于`launchMode ="singleTop"` (3认同)
  • 我只是通过将"launchMode ="singleTop""添加到AndroidManifest中的父活动来获得所需的行为. (3认同)
  • `NavUtils.navigateUpFromSameTask(this)`如果直接从其他应用程序启动`Activity`,则会导致`NullPointerException`! (2认同)

小智 29

@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);
}
Run Code Online (Sandbox Code Playgroud)

我用面漆()的insteed NavUtils ;

  • @Mehdiway是的,这是对的.或者你也可以调用`onBackPressed()`. (4认同)
  • 注意:`R.id.home`和`android.R.id.home`之间存在差异. (3认同)