Im новый для android. Я написал пару программ и попробовал их на своем телефоне. Когда я переключаю ориентации, то, как мой телефон, перезапускается программа. Все мои переменные получают reset. На самом деле единственным, что не является reset, является текст, который находится в текстовых представлениях редактирования. Что вызывает это? Как я могу остановить его? Я пробовал искать его в google и переполнении стека, но все, что я вижу, - это то, как ориентация вида меняется вместе. Я даже попытался в одной программе установить мои переменные с помощью метода get text, но это не работает.
Потеря ориентации переключения переменных
Ответ 1
Когда я переключаю ориентации, то, как мой телефон, перезапускается программа.
Чтобы быть точным, видимый в настоящее время Activity
полностью уничтожается и воссоздается. Другие компоненты вашего приложения могут или не могут быть затронуты.
Что вызывает это? Как я могу остановить его?
Это по дизайну и для его остановки, вы можете или не хотите этого делать.
Как уже упоминалось, можно указать, что вы хотите самостоятельно отрегулировать "конфигурацию" (например, ориентацию) или даже заставить только один (например, пейзаж или портрет).
Однако во многих случаях разработчик приложения может выбрать изменение макета на основе того, находится ли устройство в той или иной ориентации. Некоторые макеты могут отлично работать в портрете, но не в ландшафте (или наоборот), и цель разработанного подхода (для уничтожения/воссоздания текущего видимого Activity
) предназначена для этого.
Если разработчик не хочет обрабатывать изменения конфигурации самостоятельно или принуждать определенную ориентацию, правильный способ справиться с этим - убедиться, что все данные, введенные в "изменчивые" элементы пользовательского интерфейса (такие как EditTexts), правильно сохранены и воссозданы после изменение ориентации.
Для этого важно понимать жизненный цикл Activity
, поскольку использует различные методы Activity
, которые вызывают в течение всего жизненного цикла для сохранения/восстановления данных.
Основное чтение...
Ответ 2
убедитесь, что вы реализуете onSaveInstanceState
и будьте готовы восстановить свою активность с помощью Bundle
в onCreate
, и все будет готово. они будут вызваны во время вращения, поэтому после этого у вас будет новое действие, но если вы сохранили свое состояние и сможете его восстановить, не о чем беспокоиться.
Ответ 3
Это по дизайну, onCreate
будет вызываться при изменении ориентации. Если это нежелательно, вы можете установить, чтобы он не реагировал на изменения ориентации в AndroidManifest.xml
, поэтому ваша активность не будет воссоздана, установка android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"
для вашей активности ограничит ее портретным режимом.
Подробнее о настройках см. this.
Ответ 4
Посмотрите на этот ответ: Ищите ответ Роберта. Это именно то, что вам нужно сделать.
Ответ 5
Лучше добавьте android:configChanges="keyboardHidden|orientation|screenSize" to
AndroidManifest.xml in
activity
Ответ 6
Класс ViewModel
предоставляет эту функцию:
Объекты ViewModel автоматически сохраняются во время изменений конфигурации, поэтому данные, которые они хранят, сразу же становятся доступны для следующего действия или экземпляра фрагмента.
Смотрите разработчиков Android