Android 在方向改变时保存状态

问题描述 投票:0回答:2

我有一个 Android 应用程序,它维护有关行驶距离、经过时间等的状态。当 Android 调用 onDestroy() 时,当用户更改屏幕方向,然后恢复 onCreate(Bundle savingBundle) 中的状态。但是,我在屏幕上的 Buttons 和 EditText 对象中也有一些状态,我希望在屏幕方向上保持这些状态。例如,在 onStart(Bundle savingBundle) 中我调用:

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

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

感谢您的帮助。

android state ondestroy android-bundle
2个回答
126
投票

在Manifest文件中添加android:configChanges

<activity name= ".MainActivity" android:configChanges="orientation|screenSize"/>
默认情况下,更改方向不起作用,因为它会使 onCreate 方法再次运行,从而重新绘制视图。

但是如果包含此参数,框架将在方向改变时保持屏幕或布局相同。

请参阅以下官方文档以获取更多信息:

活动生命周期

处理配置更改


30
投票
要保存变量或值,您应该使用 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"); } }
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.