10

在 Android 模拟器中观察我的应用程序行为,我发现在更改屏幕方向 (Ctrl+F11) 后保留了 EditText 内容。但是 TextView 的内容被重置为其初始值,并且不保留程序设置的最新信息。这是定义上的行为吗?我能做些什么来保留这些内容?

4

3 回答 3

12

您可以savedInstanceBundle通过覆盖 Activity 中的两个方法来使用 来保留数据,如下所示:

@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);
}

将您的项目添加到Bundlein 中onSaveInstanceState,并在onRestoreInstanceState. 这与在创建活动时通过意图传递值的方式类似。

于 2012-10-10T15:01:29.033 回答
11

在您的TextView 中使用此属性android:freezesText="true"

于 2012-10-10T15:01:39.977 回答
3

当方向发生变化时,Android 会重新加载 Activity,从而破坏大部分信息,如 TextView 变化。您将需要覆盖onSaveInstanceState(),它将在屏幕方向更改发生之前运行。然后,您将可以在Bundle传入的onCreate. 您还应该参考此内容来了解​​活动生命周期。

于 2012-10-10T14:58:08.870 回答