Intereting Posts
Com.android.ddmlib.SyncException: слишком много открытых файлов Как сохранить целочисленный массив в SharedPreferences? Дублировать файлы во время упаковки APK Ошибка эмулятора Android: PANIC: Не удалось открыть: C: \ Users \ hallo \ .android / avd / myemu.ini Хранение данных приложений Android на SD-карте Использование атрибута onClick в макете xml вызывает NoSuchMethodException в диалоговом окне Android Позвонить по телефону нажмите на кнопку Есть ли способ отключить аппаратное ускорение только для Android 4.0.3? Как удалить свое приложение с Android-рынка React Native android build не удалось. Местоположение SDK не найдено Создание Android из источников: неподдерживаемый reloc 43 Маленький EditText имеет setError с большим количеством строк Как создать Android Spinner в качестве всплывающего окна? Android EditText – завершение ввода текста Ошибка при выполнении MyActivity: Не удалось выполнить синхронизацию проекта Gradle. Исправьте свой проект и повторите попытку.

Изменение ориентации на Android вызывает onCreate

Я создал экран поиска, на котором есть одна вкладка для ключевых слов, фильтров и кнопки поиска, а также три необязательные вкладки для разных типов результатов (каждая из которых содержит ListView с ArrayAdapter ). При запуске действия разработчик может при желании передать результаты в качестве дополнительного Parcelable[] если поиск уже выполнен. В onCreate() я создаю каждую из трех вкладок для Parcelable[] .

Когда я вызываю поиск с помощью кнопки на вкладке фильтра, я очищаю вкладки и воссоздаю их с новыми результатами, которые отлично работают. Проблема в том, что когда вы вращаете устройство, кажется, что поддержка автоматического переключения ориентации Android воссоздает всю активность, вызывая onCreate() . Это означает, что мои результаты поиска сбрасываются на Parcelable[] прошедшие при запуске операции.

Единственное решение, которое у меня было до сих пор, – это вызвать finish() затем startActivity() чтобы по существу перезапустить активность с новыми результатами. Я уверен, что должно быть гораздо более простое решение, и что я сделал что-то чрезвычайно noobish.

Есть лучший способ сделать это?

Solutions Collecting From Web of "Изменение ориентации на Android вызывает onCreate"

В курсе есть. Просто добавьте атрибут configChanges в ваш AndroidManifest.xml, например:

 <activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden" /> 

Перезагрузка активности при ротации Android Как отключить изменение ориентации на Android? http://developer.android.com/guide/topics/manifest/activity-element.html#config

То, что вы описываете, – это поведение по умолчанию. Вы должны сами определять и обрабатывать эти события, добавляя:

 android:configChanges 

К вашему манифесту, а затем изменения, которые вы хотите обработать. Поэтому для ориентации вы будете использовать:

 android:configChanges="orientation" 

И для открывания или закрывания клавиатуры вы будете использовать:

 android:configChanges="keyboardHidden" 

Если вы хотите обрабатывать оба, вы можете просто отделить их командой pipe, например:

 android:configChanges="keyboardHidden|orientation" 

Это вызовет метод onConfigurationChanged во всех Activity вы вызываете. Если вы переопределите метод, который вы можете передать в новых значениях.

Надеюсь это поможет.