Android在方向更改时保存状态

时间:2015-08-29 07:48:57

标签: android state ondestroy android-bundle

我有一个Android应用程序,它维护有关行进距离,时间流逝等的状态。当Android调用onDestroy()时,我可以方便地存储在对象中并在Bundle中存储对该对象的引用用户更改屏幕方向,然后恢复onCreate(Bundle savedBundle)中的状态。但是,我在屏幕上的Buttons和EditText对象中也有一些状态,我希望通过屏幕方向保持这种状态。例如,在onStart(Bundle savedBundle)中,我调用:

_timerButton.setBackgroundColor(Color.GREEN);
_pauseButton.setBackgroundColor(Color.YELLOW);
_pauseButton.setEnabled(false);

然后在我的应用程序的整个操作过程中,这些按钮的颜色/启用状态将被更改。是否有更方便的方法来持久保存用户界面项(EditText,Button对象等)的状态,而无需手动保存/恢复每个按钮的每个属性?在屏幕方向之间手动管理这种类型的状态感觉非常笨拙。

感谢您的帮助。

2 个答案:

答案 0 :(得分:77)

您是否尝试过使用:通过

完成工作
<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>

在清单文件中?

默认情况下不起作用,因为当您更改方向onCreate时,将再次调用它并重新绘制视图。

如果编写此参数无需在Activity中处理,框架将处理其余的事情。 如果方向改变,它将保持屏幕或布局的状态。

注意如果您使用横向模式的其他布局,则通过添加这些参数,将不会调用横向模式的布局。

Other way Another way

答案 1 :(得分:14)

要保存您的变量或值,您应该使用onSaveInstanceState(Bundle);当方向发生变化时,恢复值也应该使用onRestoreInstanceState(),但不是很常见。 ( onRestoreInstanceState()在onStart()之后调用,而onCreate()在 onStart()之前调用。 使用put方法在 onSaveInstanceState()

中存储值
protected void onSaveInstanceState(Bundle icicle) {
  super.onSaveInstanceState(icicle);
  icicle.putLong("param", value);
}

并恢复 onCreate()

中的值
public void onCreate(Bundle icicle) {
  if (icicle != null){
    value = icicle.getLong("param");
  }
}
相关问题