Ответ 1
Когда ваша ориентация меняется, вам не нужно вручную менять файл ландшафтного макета. Android делает это автоматически для вас. Когда изменения ориентации, Android уничтожает вашу текущую деятельность и снова создает новое действие, поэтому вы теряете текст.
Есть две части, которые вам нужно сделать, предполагая, что вам нужен отдельный макет для портретной и альбомной ориентации.
-
Предполагая, что у вас есть два файла макета XML для портретной и альбомной ориентации, поместите файл макета main.xml в следующие папки:
res/layout/main.xml < - это будет ваш портретный макет
res/layout-land/main.xml < - это будет ваш ландшафтный дизайнЧтобы все, что вам нужно сделать, не нужно касаться файла манифеста, чтобы изменить
android:configChanges="orientation"
или переопределитьonConfigurationChanged()
. На самом деле, он рекомендовал вам не трогать это за то, что вы пытаетесь достичь. -
Теперь, чтобы сохранить текст в текстовом представлении =) Предположим, что ваше текстовое представление называется MyTextView в вашем XML файле макета. Для вашей деятельности потребуется следующее:
private TextView mTextView; private static final String KEY_TEXT_VALUE = "textValue"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mTextView = (TextView) findViewById(R.id.main); if (savedInstanceState != null) { CharSequence savedText = savedInstanceState.getCharSequence(KEY_TEXT_VALUE); mTextView.setText(savedText); } } @Override protected void onSaveInstanceState (Bundle outState) { super.onSaveInstanceState(outState); outState.putCharSequence(KEY_TEXT_VALUE, mTextView.getText()); }
В принципе, всякий раз, когда Android уничтожает и воссоздает вашу активность для изменения ориентации, она вызывает onSaveInstanceState()
перед уничтожением и вызывает onCreate()
после воссоздания. Независимо от того, что вы сохраните в комплекте в onSaveInstanceState, вы можете вернуться из параметра onCreate()
.
Итак, вы хотите сохранить значение текстового представления в onSaveInstanceState()
и прочитать его и заполнить свое текстовое представление в onCreate(). Если действие создается в первый раз (не из-за изменения вращения), файл savedInstanceState будет иметь значение null в onCreate()
. Вам также, вероятно, не нужен android:freezesText="true"
Вы также можете попробовать сохранить другие переменные, если вам нужно, поскольку вы потеряете все переменные, которые вы сохранили, когда действие было уничтожено и воссоздано.