Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для Hellrider_
50 / 50 / 4
Регистрация: 12.03.2013
Сообщений: 171

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

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

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

Как вообще реализовывают в сложных программах пересоздание фрагментов? Ибо при моем подходе, делать обработку для каждого фрагмента, можно рехнуться.
Решил попробовать отключить пересоздание в манифесте через android:configChanges="keyboardHidden|or ientation|screenSize", стало сразу на много проще, но везде пишут, что этот метод не рекомендован и что нужно обновлять в ручную какие то данные. Разжуйте стоит ли этот метод использовать или нет?
Ну и хотелось бы услышать опытных разработчиков, как бороться с пересозданием с минимальными затратами.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2016, 21:05
Ответы с готовыми решениями:

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

Захват содержимого экрана. Как они это делают?
Всем привет. Подскажите, плиз... вот так у меня захватывается экран: tv := getdc(0); w := GetDeviceCaps(tv, HORZRES); h :=...

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

6
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
09.10.2016, 09:07
Hellrider_, постарайтесь разрабатывать так как будто активити может в любой момент погибнуть и возродится. Да, можно рехнуться
1
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
09.10.2016, 11:19
Лучший ответ Сообщение было отмечено Hellrider_ как решение

Решение

Цитата Сообщение от Hellrider_ Посмотреть сообщение
но везде пишут, что этот метод не рекомендован и что нужно обновлять в ручную какие то данные. Разжуйте стоит ли этот метод использовать или нет?
в инете пишут очень много чуши
на самом деле если для обеих ориентаций используется одна и та же разметка - такой подход самое то

если разметки разные - иначе никак, только пересоздание
нужно просто понять что в onCreateView только инициализация дочерних вьюшек фрагмента, а остальная логика на усмотрение - onResume, onAttach и так далее, то задачи
1
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
11.10.2016, 10:55
Цитата Сообщение от Hellrider_ Посмотреть сообщение
android:configChanges="keyboardHidden|or ientation|screenSize"
Не 100% результат. Изменение конфигурации возможно при изменении локали и шрифта, по-моему (обычно так пишут). Я тоже использую такую ерунду, когда надоедает бороться с пересозданием. Но сначала пишу для случая пересоздания и обрабатываю хотя бы минимально что-то (запоминание данных через onSaveInstanceState или onPause).
Когда хотя бы минимально работает, обычно в активности выставляю портретную ориентацию. Либо при запуске активности определяю текущую ориентацию и фиксирую её.
Также, насколько помню, при повороте фрагменты не пересоздаются (или это надо сделать через setRetainInstance), можно присоединить к пересозданной активности через поиск фрагмента.
Короче, голову надо отрубить тому создателю Андроида, который решил, что надо "пойти другим путём" и пересоздавать разметку вместе с контролами.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
12.10.2016, 12:48
Вот, кстати, ещё одна тема: http://stackoverflow.com/quest... ice-rotate. Пишут, что можно проверять в активности savedInstanceState == null, и если да, то создавать фрагменты.
0
43 / 16 / 6
Регистрация: 05.12.2015
Сообщений: 65
12.10.2016, 14:53
Цитата Сообщение от Hellrider_ Посмотреть сообщение
Разрабатываю приложение, решил делать одно активити и FrameLayout в нем, куда будут помещаться фрагменты (настройки, диалоги и т.д.). Все конечно хорошо, но когда дело доходит до поворота экрана, начинается сущий ад. Создается несколько фрагментов и я их сохраняю в фрагмент менеджер и после поворота экрана восстанавливаю. Но когда начинаю поворачивать экран и переходить между фрагментами по Back Stack в разных вариациях, приложение падает с исключением. Пробовал и так и сяк делать сохранение и восстановление, но исключение неумолимо.
Не злоупотребляйте фрагментами. У фрагметнта свой жизненный цикл, у активити свой, легко запутатся.
Если это экран, пусть будет отдельным активити, фрагменты считаю, нужно использовать, только при делении активити на блоки разного функционала, которые одинаковы для разных частей приложения.
0
426 / 406 / 68
Регистрация: 06.10.2012
Сообщений: 1,748
12.10.2016, 19:18
xaat, решил встрять в диалог, если позволите.
Я часто использую фрагменты, особенно, если нужен Navigation Drawer (ибн "боковое меню"). Читал статейку на "Хабре", где одна контора решила от них отказаться, потому как соотношение жизненных циклов и правда очень разветвлённое, а количество проблем пропорционально 2^n (n - кол-во фрагментов).
Активно используйте DialogFragment на замену AlertDialog и прочих Dialog.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2016, 19:18
Помогаю со студенческими работами здесь

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

Почему не делают частоту обновления экрана больше 60Гц?
Вот раньше у меня был старый жк-монитор с частотой обновления 75Гц! Почему сейчас делают всего лишь 60 Гц? Ведь чем больше частота...

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

Поворот экрана
Как программно на C# изменить ориентацию экрана, как это сделано в свойствах экрана Windows. Какую WinAPI функцию вызвать? И...

Поворот экрана - Андроид
Делаю прогу под андроид на Delphi XE5. Хочу сделать так, чтобы поворот экрана не влиял на форму, т.е. форма не поворачивалась. Каким...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru