0

У меня есть файл макета activity_main.xml, и я создал файл ландшафтного макета в директории «layout-land». Очевидно, что оба файла имеют одинаковые имена.Android-переход на макет-сайт

Пейзаж и основные макеты работают хорошо, но когда я перемещаю свой телефон в swich layout, все мои текстовые элементы и editTextes меняются на значения по умолчанию.

+0

что потому что активность перезагружается при повороте экрана –

+0

, вам нужно обрабатывать изменения времени выполнения. heres официальный doc о том, как это сделать https://developer.android.com/guide/topics/resources/runtime-changes.html –

+5

См. ответы на вопрос: [Обработка вращения экрана без потери данных - Android] (http: /stackoverflow.com/questions/10126845/handle-screen-rotation-without-losing-data-android) –

ответ

0

Каждый раз, когда вы поворачиваете телефон, изменение конфигурации произойдет и новый экземпляр вашей деятельности создается. Вот почему ваши Textview и Edittext установлены в значения по умолчанию. Однако, если ваши представления имеют на них id в xml, тогда значения, установленные на них, не будут потеряны во время изменения конфигурации. Если вы не хотите устанавливать идентификатор, то другим способом было бы сохранить значения Textview и Edittext в onSaveInstanceState и восстановить их в onRestoreInstanceState. Например, чтобы сохранить TextView и значения EditText следуют следующий код:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("arg1", textview1.getText()); 
    outState.putString("arg2", edittext1.getText().toString()); 
    ...... 
} 

Чтобы восстановить сохраненные значения следуют следующий код:

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    textview1.setText(savedInstanceState.getString("arg1")); 
    edittext1.setText(savedInstanceState.getString("arg2")); 
    ...... 
} 

Вы можете прочитать больше об этом здесь: https://inthecheesefactory.com/blog/fragment-state-saving-best-practices/en

+0

У моего Textview и Edittext есть идентификаторы в обоих файлах макета xml, и это не работает. Я попробую сохранить и восстановить переменную, спасибо за отличный ответ. –

+0

жаль, что я не упомянул, что идентификаторы должны быть уникальными и одинаковыми в обеих макетах, то есть в портретной и альбомной ориентации. – Harry

+0

, конечно, у меня одинаковые идентификаторы в обоих макетах для каждого вида, но что вы имеете в виду «уникальные» идентификаторы? Прямо сейчас у меня есть main_layout и landscape_layout, которые являются одинаковыми файлами. Я знаю, что могу сделать это с Bundle, но мне просто интересно, могу ли я сделать это без Bundle :) –