4

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

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

运行良好并且状态保持不变。表示我在编辑文本中输入值。并在复选框上单击为结果调用新活动,并在返回第一个活动时保持状态。

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

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

4

2 回答 2

1

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

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

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

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

于 2013-03-22T12:07:21.483 回答
1

当您启动新 Activity 时,当前 Activity 将被隐藏,新 Activity 将放置在堆栈顶部。现在,如果您按下新 Activity 上的后退按钮,那么第一个 Activity 应该以其当前状态出现(如果它没有被破坏,则调用 finish())它离开的地方,即如果复选框被选中,那么它应该保持检查。除非方向改变或活动被破坏,否则您不需要保存活动状态。

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

于 2013-03-22T12:36:45.067 回答