我有一个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条答案
按热度按时间puruo6ea1#
在清单文件中添加android:configChanges
默认情况下,这不起作用,因为更改方向会导致再次调用onCreate方法并重画视图。
但是,如果包含此参数,则框架将在方向更改时处理保留屏幕或布局的状态。
有关详细信息,请参阅以下官方文档:
Activity Lifecycle
Handling configuration changes
htrmnn0y2#
要保存变量或值,应使用onSaveInstanceState(Bundle);当方向发生变化时,应恢复值,也应使用onRestoreInstanceState(),但不是很常见。(**onRestoreInstanceState()在onStart()之后调用,而onCreate()在onStart()之前调用。使用put方法将值存储在onSaveInstanceState()**中
并恢复**onCreate()**中的值: