观察 Android 模拟器中应用的行为,我发现在更改屏幕方向(Ctrl+F11)后 EditText 中的内容保留,但 TextView 的内容重置为其初始值,并未保留程序设置的最新信息。这是固有的行为吗?我该如何保留这些内容?
你可以通过覆盖活动内的两个方法来使用savedInstanceBundle
保留数据,类似于以下示例:
您可以使用savedInstanceBundle
通过覆盖活动内的两个方法来保存数据,如下所示:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
// Save state to the savedInstanceState
savedInstanceState.putString("MyString", textview.getText());
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Restore state from savedInstanceState
String myString = savedInstanceState.getString("MyString");
textview.setText(myString);
}
在onSaveInstanceState
中将您的项目添加到Bundle
,并在onRestoreInstanceState
中读取它们。这与创建活动时通过意图传递值的方式类似。
在你的TextView中使用此属性:android:freezesText="true"
。
当屏幕方向发生变化时,Android 会重新加载 Activity,因此大部分信息(例如 TextView 的更改)都会被销毁。您需要重写 onSaveInstanceState()
方法,在屏幕方向更改之前运行。然后在传递给 onCreate
的 Bundle
中访问它。您还应该参考这个链接了解 Activity 生命周期。