Observing my application behavior in Android emulator, I see that EditText contents is preserved after changing screen orientation (Ctrl+F11). But TextView contents is reset to its initial value and doesn't keep latest information set by the program. Is this behavior by definition? What can I do to keep this contents?
Use this property in your TextView android:freezesText="true"
.
You can use the savedInstanceBundle
to keep hold of the data by overriding two methods inside your activity, similar to below:
@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);
}
Add your items to the Bundle
in onSaveInstanceState
, and read them back in during onRestoreInstanceState
. This works in a similar way to passing values through intents when creating activities.
When orientation changes happen, Android reload the Activity hence destroying most information like TextView changes. You will need to override onSaveInstanceState()
, which will run before the screen orientation change happens. Then you will have access to it in your Bundle
that is passed into onCreate
. You should also reference this to understand the Activity Life cycle.
来源:https://stackoverflow.com/questions/12822267/textview-contents-is-lost-after-changing-screen-orientation