Android 方向改变时保存状态
Android save state on orientation change
我有一个 Android 应用程序,它维护有关行进距离、经过时间等的状态。我可以方便地将此状态存储在一个对象中,并在 [= 时将对该对象的引用存储在 Bundle 中20=] 当用户改变屏幕方向时调用onDestroy(),然后在onCreate(Bundle savedBundle)中恢复状态。但是,我在屏幕上的 Buttons 和 EditText 对象中也有一些状态,我想通过屏幕方向保留这些状态。例如,在 onStart(Bundle savedBundle) 中,我调用:
_timerButton.setBackgroundColor(Color.GREEN);
_pauseButton.setBackgroundColor(Color.YELLOW);
_pauseButton.setEnabled(false);
然后在我的应用程序的整个运行过程中,这些按钮的colors/enabled状态将发生变化。有没有更方便的方法来保持用户界面项(EditText、Button 对象等)的状态,而无需手动 save/restore 每个按钮的每个属性?在屏幕方向之间手动管理这种类型的状态感觉真的很笨拙。
感谢您的帮助。
您是否尝试过使用:它的工作通过
<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>
在清单文件中?
默认情况下不起作用,因为当您更改方向时 onCreate
将再次调用并重新绘制您的视图。
如果你在 Activity 中写这个不需要处理的参数,框架会处理剩下的事情。
如果方向改变,它将保留屏幕或布局的状态。
注意如果您为横向模式使用不同的布局,通过添加这些参数,横向模式的布局将不会被调用。
Other way and Another way
要保存您的变量或值,您应该使用 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");
}
}
我有一个 Android 应用程序,它维护有关行进距离、经过时间等的状态。我可以方便地将此状态存储在一个对象中,并在 [= 时将对该对象的引用存储在 Bundle 中20=] 当用户改变屏幕方向时调用onDestroy(),然后在onCreate(Bundle savedBundle)中恢复状态。但是,我在屏幕上的 Buttons 和 EditText 对象中也有一些状态,我想通过屏幕方向保留这些状态。例如,在 onStart(Bundle savedBundle) 中,我调用:
_timerButton.setBackgroundColor(Color.GREEN);
_pauseButton.setBackgroundColor(Color.YELLOW);
_pauseButton.setEnabled(false);
然后在我的应用程序的整个运行过程中,这些按钮的colors/enabled状态将发生变化。有没有更方便的方法来保持用户界面项(EditText、Button 对象等)的状态,而无需手动 save/restore 每个按钮的每个属性?在屏幕方向之间手动管理这种类型的状态感觉真的很笨拙。
感谢您的帮助。
您是否尝试过使用:它的工作通过
<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>
在清单文件中?
默认情况下不起作用,因为当您更改方向时 onCreate
将再次调用并重新绘制您的视图。
如果你在 Activity 中写这个不需要处理的参数,框架会处理剩下的事情。 如果方向改变,它将保留屏幕或布局的状态。
注意如果您为横向模式使用不同的布局,通过添加这些参数,横向模式的布局将不会被调用。
Other way and Another way
要保存您的变量或值,您应该使用 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");
}
}