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

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

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

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

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

Ответы

Ответ 2

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

android:configChanges

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

android:configChanges="orientation"

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

android:configChanges="keyboardHidden"

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

android:configChanges="keyboardHidden|orientation"

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

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