2015-01-15 2 views
1

У меня есть активность с 4 элементами. Счетчик, содержащий список дат, счетчик, содержащий список часов, кнопку и вид списка. Выбранные элементы spinner используются для формирования URL-адреса веб-службы, который вызывается при нажатии кнопки, и ответ отображается в виде списка.Остановка onCreate выполняется на экране вращения в Android

Проблема заключается в том, что пользователь просматривает приложение в портретном режиме, выбирает дату, выбирает час и нажимает кнопку, ответ вызова веб-службы отображается в представлении списка, однако, если устройство повернуто на пейзаж, то данные в виде списка исчезли (потому что для его получения требуется щелчок на кнопке).

Я понимаю, что onCreate вызывается, когда экран вращается. Я не хочу форсировать ориентацию, так ли я могу остановить очистку списка? Обратите внимание, что выбранные значения в моих прядильщиках остаются неизменными после вращения, это просто ответ в списке, который потерян.

ответ

2

Простейшее способ предотвратить активность отдыха поместить это в вас AndroidManifest

<activity android:name=".YourActivityName" 
        android:configChanges="orientation|keyboardHidden|screenSize"> 

Прочитайте это для получения дополнительной информации - Supporting Multiple Screens

+0

Это действительно не очень хорошая идея, см .: http://stackoverflow.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation – goetzc

0

Вы можете заставить ориентацию экрана активности в AndroidManifest.xml установке screenOrientation свойства:

<activity android:name=".FooActivity" 
    android:screenOrientation="portrait"/> 

Это полурешение. Если вы хотите обработать поворот экрана, вы должны сохранить и восстановить состояние активности. Это главный, королевский PITA в любом приложении Android, которое я видел.

Проблема заключается в том, что ваша прикладная логика смешивается с кодом просмотра, который может быть уничтожен в любой момент. Отличная комбинация, Google! Это похоже на запуск функции, которая может исчезнуть во время выполнения. :)

Чтобы противостоять этому жалкому конструкторскому решению, вы можете перенести свою прикладную логику на обслуживание, которое не будет уничтожено при повороте экрана. Эта двухслойная конструкция ближе к общепринятому шаблону MVC, поскольку вы отделяете свою логику от своего вида. Обслуживание остается, активность прикрепляется и отвлекается от обслуживания по требованию, делая поворот экрана, управляя легким ветром.

Если вы имеете дело с веб-сервисами, не пытайтесь изобрести свое собственное решение для этого. Есть несколько хороших библиотек, которые прекрасно справляются с этим, например RoboSpice, и вы, вероятно, никогда не придете с каким-нибудь быстрым решением, которое так же хорошо, как эти libs. Попробуйте.

Кроме того, смотреть видео Google I/O о разработке клиентских приложениях Android REST: https://www.youtube.com/watch?v=xHXn3Kg2IQE

0

Попросите кнопку установить переменную статический класс, или общие предпочтения. Затем вызовите метод, который считывает это значение и делает то, что вы хотите. THEN, позовите тот же самый метод, в onResume(), возможно, исходя из условия ... Я думаю, это то, что сработало для меня. Когда вы вернетесь из изменения конфигурации или убьете, onResume() должен выполнить все, что вы делали в последний раз.

Смежные вопросы