Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Hellrider_
49 / 49 / 2
Регистрация: 12.03.2013
Сообщений: 161
#1

Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики? - Программирование Android

08.10.2016, 21:05. Просмотров 368. Ответов 6
Метки нет (Все метки)

Разрабатываю приложение, решил делать одно активити и FrameLayout в нем, куда будут помещаться фрагменты (настройки, диалоги и т.д.). Все конечно хорошо, но когда дело доходит до поворота экрана, начинается сущий ад. Создается несколько фрагментов и я их сохраняю в фрагмент менеджер и после поворота экрана восстанавливаю. Но когда начинаю поворачивать экран и переходить между фрагментами по Back Stack в разных вариациях, приложение падает с исключением. Пробовал и так и сяк делать сохранение и восстановление, но исключение неумолимо.

Как вообще реализовывают в сложных программах пересоздание фрагментов? Ибо при моем подходе, делать обработку для каждого фрагмента, можно рехнуться.
Решил попробовать отключить пересоздание в манифесте через android:configChanges="keyboardHidden|orientation|screenSize", стало сразу на много проще, но везде пишут, что этот метод не рекомендован и что нужно обновлять в ручную какие то данные. Разжуйте стоит ли этот метод использовать или нет?
Ну и хотелось бы услышать опытных разработчиков, как бороться с пересозданием с минимальными затратами.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2016, 21:05     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики?
Посмотрите здесь:
Android Как отследить поворот экрана
Android Поворот отдельной страницы в приложении, когда все остальные этого не делают
Поворот Экрана Android
Android Запретить поворот экрана
Кнопки с картинкой и поворот экрана Android
Android Приложение останавливается, когда делаю поворот экрана
Android Поворот куба сначала вокруг оси y с.к. экрана потом вокруг оси x с.к. экрана
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
3120 / 1922 / 208
Регистрация: 13.01.2012
Сообщений: 7,362
09.10.2016, 09:07     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики? #2
Hellrider_, постарайтесь разрабатывать так как будто активити может в любой момент погибнуть и возродится. Да, можно рехнуться
Pablito
2419 / 1864 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
09.10.2016, 11:19     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики? #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Hellrider_ Посмотреть сообщение
но везде пишут, что этот метод не рекомендован и что нужно обновлять в ручную какие то данные. Разжуйте стоит ли этот метод использовать или нет?
в инете пишут очень много чуши
на самом деле если для обеих ориентаций используется одна и та же разметка - такой подход самое то

если разметки разные - иначе никак, только пересоздание
нужно просто понять что в onCreateView только инициализация дочерних вьюшек фрагмента, а остальная логика на усмотрение - onResume, onAttach и так далее, то задачи
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
11.10.2016, 10:55     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики? #4
Цитата Сообщение от Hellrider_ Посмотреть сообщение
android:configChanges="keyboardHidden|orientation|screenSize"
Не 100% результат. Изменение конфигурации возможно при изменении локали и шрифта, по-моему (обычно так пишут). Я тоже использую такую ерунду, когда надоедает бороться с пересозданием. Но сначала пишу для случая пересоздания и обрабатываю хотя бы минимально что-то (запоминание данных через onSaveInstanceState или onPause).
Когда хотя бы минимально работает, обычно в активности выставляю портретную ориентацию. Либо при запуске активности определяю текущую ориентацию и фиксирую её.
Также, насколько помню, при повороте фрагменты не пересоздаются (или это надо сделать через setRetainInstance), можно присоединить к пересозданной активности через поиск фрагмента.
Короче, голову надо отрубить тому создателю Андроида, который решил, что надо "пойти другим путём" и пересоздавать разметку вместе с контролами.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
12.10.2016, 12:48     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики? #5
Вот, кстати, ещё одна тема: http://stackoverflow.com/questions/3...-device-rotate. Пишут, что можно проверять в активности savedInstanceState == null, и если да, то создавать фрагменты.
xaat
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
12.10.2016, 14:53     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики? #6
Цитата Сообщение от Hellrider_ Посмотреть сообщение
Разрабатываю приложение, решил делать одно активити и FrameLayout в нем, куда будут помещаться фрагменты (настройки, диалоги и т.д.). Все конечно хорошо, но когда дело доходит до поворота экрана, начинается сущий ад. Создается несколько фрагментов и я их сохраняю в фрагмент менеджер и после поворота экрана восстанавливаю. Но когда начинаю поворачивать экран и переходить между фрагментами по Back Stack в разных вариациях, приложение падает с исключением. Пробовал и так и сяк делать сохранение и восстановление, но исключение неумолимо.
Не злоупотребляйте фрагментами. У фрагметнта свой жизненный цикл, у активити свой, легко запутатся.
Если это экран, пусть будет отдельным активити, фрагменты считаю, нужно использовать, только при делении активити на блоки разного функционала, которые одинаковы для разных частей приложения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2016, 19:18     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики?
Еще ссылки по теме:
Android Поворот экрана. Сохранение данных, но смена размеров компонентов
Запретить поворот экрана на телефонах и позволить его на планшетах Android
Android Пересоздание Fragment при листании, как избавиться?
Android Пересоздание активити
Хранение обьектов в SQLite Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
12.10.2016, 19:18     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики? #7
xaat, решил встрять в диалог, если позволите.
Я часто использую фрагменты, особенно, если нужен Navigation Drawer (ибн "боковое меню"). Читал статейку на "Хабре", где одна контора решила от них отказаться, потому как соотношение жизненных циклов и правда очень разветвлённое, а количество проблем пропорционально 2^n (n - кол-во фрагментов).
Активно используйте DialogFragment на замену AlertDialog и прочих Dialog.
Yandex
Объявления
12.10.2016, 19:18     Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru