Android:后退按钮中的onSaveInstanceState

时间:2013-03-22 12:00:22

标签: android back android-button persist savestate

我正在开发一个应用程序,我在其中覆盖了后退按钮。我创建了一个复选框。点击我正在调用的意图:

startActivityforResult();

并且还将活动状态保持为:

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  savedInstanceState.putBoolean("checkbox", checkbox.isChecked());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
  super.onRestoreInstanceState(savedInstanceState);
  checkbox_state = savedInstanceState.getBoolean("checkbox");
}

运行良好,状态得以维持。 意味着我在编辑文本中输入值。并在复选框上单击调用结果的新活动,并在第一个活动返回时保持状态。

现在,但是从第二个活动开始,如果我点击设备返回按钮,则不会保持状态。

那么我该怎样做才能维持后退按钮上的状态。我搜索但没有找到满意的解决方案。请建议我。

2 个答案:

答案 0 :(得分:1)

当您启动新的Activity时,当前的Activity被隐藏,新的Activity被放置在堆栈的顶部。现在,如果你按下新活动上的后退按钮,那么第一个活动应该处于当前状态(如果它没有被销毁,调用finish())它离开的地方,即如果选中复选框则应该保留检查。除非更改方向或销毁活动,否则无需保存活动状态。

你确定你没有在onActivityResult或onResume()方法中做任何影响复选框状态的事情吗?我建议首先注释掉这两种方法中的所有代码,看看你的复选框是否保留了状态。您还可以确保在开始新活动之前代码本身没有取消选中复选框吗?

答案 1 :(得分:0)

  

现在,但是从第二个活动开始,如果我点击设备返回按钮,则不会保持状态。

onSaveInstanceState()主要用于配置更改(例如,旋转屏幕)。

  

那么我应该怎样做才能维持后退按钮上的状态

最有可能的是,除了数据模型之外,没有“状态”需要“维护”。您的活动需要更新其数据模型:文件,数据库,首选项,ContentProvider,一些作为内存数据模型管理器的单例,无论如何。