Изменение ориентации на Android вызывает onCreate
Я создал экран поиска, на котором есть одна вкладка для ключевых слов, фильтров и кнопки поиска и три дополнительных вкладки для разных типов результатов (каждая из которых содержит ListView
с ArrayAdapter
). При запуске действия разработчик может дополнительно передать результаты в качестве дополнительного Parcelable[]
, если поиск уже выполнен. В методе onCreate()
я создаю каждую из трех вкладок для пропущенного Parcelable[]
.
Когда я вызываю поиск с помощью кнопки на вкладке фильтра, я очищаю вкладки и воссоздаю их с новыми результатами, которые отлично работают. Проблема в том, что, когда вы вращаете устройство, кажется, что поддержка автоматического переключения ориентации Android воссоздает всю активность, вызывая onCreate()
. Это означает, что мои результаты поиска reset передаются Parcelable[]
при запуске действия.
Единственное решение, которое я получил до сих пор, - вызвать finish()
, затем startActivity()
, чтобы по существу перезапустить активность с новыми результатами. Я уверен, что должно быть гораздо более простое решение, и что я сделал что-то чрезвычайно noobish.
Есть ли лучший способ сделать это?
Ответы
Ответ 1
Конечно. Просто добавьте атрибут configChanges в ваш AndroidManifest.xml, например:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden" />
Перезагрузка активности при ротации Android
Как отключить изменение ориентации на Android?
http://developer.android.com/guide/topics/manifest/activity-element.html#config
Ответ 2
То, что вы описываете, - это поведение по умолчанию. Вы должны сами определять и обрабатывать эти события, добавляя:
android:configChanges
в ваш манифест, а затем изменения, которые вы хотите обработать. Поэтому для ориентации вы будете использовать:
android:configChanges="orientation"
а для открытой или закрытой клавиатуры вы будете использовать:
android:configChanges="keyboardHidden"
Если вы хотите обрабатывать оба, вы можете просто отделить их командой pipe, например:
android:configChanges="keyboardHidden|orientation"
Это вызовет метод onConfigurationChanged
во всех Activity
, которые вы вызываете.
Если вы переопределите метод, который вы можете передать в новых значениях.
Надеюсь, что это поможет.