Android:onSaveInstanceState返回按钮

Android:onSaveInstanceState返回按钮,android,back,android-button,persist,savestate,Android,Back,Android Button,Persist,Savestate,我正在开发一个应用程序,其中覆盖了后退按钮。我创建了一个复选框。点击我所要求的意图: startActivityforResult(); 并将活动状态保持为: @Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putBoolean("checkbox", check

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

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");
}
运行正常,状态保持不变。 表示我正在编辑文本中输入值。在复选框中,单击调用新活动以获得结果,当返回第一个活动时,状态为“保持”

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

那么,我应该怎么做才能保持“后退”按钮的状态呢。我搜索了一下,但没有找到满意的解决方案。请推荐我

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

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

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


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

启动新活动时,当前活动将隐藏,新活动将放在堆栈顶部。现在,如果您按下新活动上的“后退”按钮,则第一个活动应在其当前状态(如果未销毁,则调用finish())出现在其保留的位置,即,如果选中复选框,则应保持选中状态。除非方向已更改或活动已销毁,否则不需要保存活动状态


您确定在onActivityResult或onResume()方法中没有执行任何影响复选框状态的操作吗?我建议首先注释掉这两个方法中的所有代码,并查看您的复选框是否保留该状态。您还可以确保代码本身在启动新活动之前没有取消选中复选框吗?

我正在activity2的编辑文本中输入一些数据,并通过intent在activity1中捕获这些数据。假设我有一个从数据库填充的列表视图。您认为每次从其他活动导航回数据库时,我都应该从数据库中填充它吗?或者我应该将适配器内容保存在状态并重用它?只想知道您对此的看法:)@ΕГПцц:从数据库填充是最安全的,因为自上次活动以来,数据可能已经发生了变化。把它保存在州里是最糟糕的选择。中间立场是维护某种数据模型管理单例,它缓存信息,是所有活动访问数据模型的点。最糟糕的情况是因为它浪费资源吗?如果您知道在这两个活动之间导航时数据没有得到更新,那么从状态恢复数据不是会更灵敏吗?因为我不喜欢在导航之间或旋转屏幕时看到“加载请等待…”之类的内容:)@ΓГццццццццццццццццццц。而且,它最有可能过时。“将其从状态恢复不是更灵敏吗?”--是的,如果您忽略所有其他问题。“因为我不喜欢在导航之间或旋转屏幕时看到‘加载请等待……’之类的东西”——这说明您还有其他问题,除非Traceview显示100%的延迟都在数据库I/O中。@ΓГцццц:对于配置更改,更好的解决方案是保留
ListFragment
。导航不应导致数据库重新查询,除非上一个活动实例已被
finish()
'd。