С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Как вообще реализовывают в сложных программах пересоздание фрагментов? Ибо при моем подходе, делать обработку для каждого фрагмента, можно рехнуться.
Решил попробовать отключить пересоздание в манифесте через android:configChanges="keyboardHidden|orientation|screenSize", стало сразу на много проще, но везде пишут, что этот метод не рекомендован и что нужно обновлять в ручную какие то данные. Разжуйте стоит ли этот метод использовать или нет?
Ну и хотелось бы услышать опытных разработчиков, как бороться с пересозданием с минимальными затратами.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2016, 21:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поворот экрана и пересоздание обьектов. Как делают матёрые разработчики? (Программирование Android):

Запретить пересоздание Activity при повороте экрана - Программирование Android
В общем, проблема в заголовке. Собственно сам конфиг из манифеста <activity android:name=".MainActivity" ...

Как отследить поворот экрана - Программирование Android
Есть 2 активити Главный activity_main.xml (на котором есть одна кнопка с id= "myBtn" и текстовое поле), и активити который срабатывает...

Поворот отдельной страницы в приложении, когда все остальные этого не делают - Программирование Android
Можно ли такое реализовать и где?

Поворот Экрана - Программирование Android
У меня есть TableLayout и матрица смолл кнопок 8 на 8 описанных через XML. При повороте экрана часть кнопок не видно. Как можно описать,...

Запретить поворот экрана - Программирование Android
В манифесте указал <application android:screenOrientation="portrait" но экран по прежнему поворачивается...

Кнопки с картинкой и поворот экрана - Программирование Android
Всем. Я второй день как начал разбираться с этим, голова кругом идет. Не могу нагуглить как идеологически правильно сделать так что...

6
vxg
Модератор
3188 / 1991 / 228
Регистрация: 13.01.2012
Сообщений: 7,712
09.10.2016, 09:07 #2
Hellrider_, постарайтесь разрабатывать так как будто активити может в любой момент погибнуть и возродится. Да, можно рехнуться
1
Pablito
2534 / 2013 / 627
Регистрация: 12.05.2014
Сообщений: 7,067
Завершенные тесты: 1
09.10.2016, 11:19 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Hellrider_ Посмотреть сообщение
но везде пишут, что этот метод не рекомендован и что нужно обновлять в ручную какие то данные. Разжуйте стоит ли этот метод использовать или нет?
в инете пишут очень много чуши
на самом деле если для обеих ориентаций используется одна и та же разметка - такой подход самое то

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

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

Поворот куба сначала вокруг оси y с.к. экрана потом вокруг оси x с.к. экрана - Программирование Android
Предыстория: Я пишу 3D игру и там соответственно нужно производить поворот тела в пространстве. нужно делать 2 поворота по горизонтали и...

Поворот экрана. Сохранение данных, но смена размеров компонентов - Программирование Android
Допустим на экране есть кнопка, на которой есть текст. При создании активити выбирается рандомное число и оно ставится как название кнопки....

Запретить поворот экрана на телефонах и позволить его на планшетах - Программирование Android
Как сделать, чтобы на мелких экранах (телефонах) экран был только в портретном режиме, а на больших (планшетах) - и в портретном и в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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