Ответ 1
Это не нормальное поведение.
Прежде всего, убедитесь, что у вас есть идентификаторы, назначенные вашим элементам 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);
Это решит вашу проблему.
Если это не удастся, вам нужно сохранить и восстановить состояние самостоятельно.
Переопределить 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"
, чтобы попытаться это сделать, это неправильный путь.