Это ненормальное поведение.
Прежде всего, убедитесь, что у вас есть идентификаторы, назначенные вашим элементам управления EditText
в формате XML.
Редактировать 1: Ему просто нужен идентификатор, период. Если вы делаете это программно, оно потеряет состояние, если оно не имеет идентификатора.
Таким образом, используя это в качестве быстрой & грязного например:
// Find my layout
LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.ll1);
// Add a new EditText with default text of "test"
EditText testText = new EditText(this.getApplicationContext());
testText.setText("test");
// This line is the key; without it, any additional text changes will
// be lost on rotation. Try it with and without the setId, text will revert
// to just "test" when you rotate.
testText.setId(100);
// Add your new EditText to the view.
mLinearLayout.addView(testText);
Это позволит решить вашу проблему.
Если это не удастся, вам нужно сохранить и восстановить состояние самостоятельно.
Override onSaveInstanceState
так:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}
А затем восстановить в OnCreate
:
public void onCreate(Bundle savedInstanceState) {
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}
Кроме того, пожалуйста, не используйте android:configChanges="orientation"
, чтобы попытаться сделать это, это неправильный путь.
Спасибо. Я создаю этот editText в Java (программно), а не в XML. Таким образом, у editText отсутствует XML-идентификатор. Может быть, это и есть причина? Android не будет сохранять просмотры, созданные программно?Однако он сохраняет состояние радиогруппы, которая также была создана программно. Weird –
Извините за путаницу: состояние radioGroup фактически сохраняется через мой код (который сохраняет и затем извлекает настройки приложения), а не системой. Я удалил этот код и проверил, что система выполняет _not_ сохранение состояния этого представления. Поэтому это должно быть причиной: программно созданные представления не имеют XML-идентификатора и поэтому не сохраняются автоматически. Как вы думаете? Имеет ли это смысл? –
Ему просто нужен идентификатор, период! Проверьте мое редактирование, и если оно работает, примите ответ, пожалуйста. :) –