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

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

Войти
Регистрация
Восстановить пароль
 
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
#1

Как запретить смену ориентации при вызове DialogFragment? - Программирование Android

08.02.2016, 12:44. Просмотров 304. Ответов 12
Метки нет (Все метки)

В активити вызывается DialogFragment, как запретить смену ориентации экрана пока он активен?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2016, 12:44     Как запретить смену ориентации при вызове DialogFragment?
Посмотрите здесь:
Android Запретить смену ориентации экрана
Запретить смену ориентации экрана пока идет загрузка Android
Обновление списка при выходе из DialogFragment Android
Как запустить service при входящем вызове? Android
Как запихнуть в DialogFragment список контролов? Android
Как передать данные из Fragments в DialogFragment Android
Android Пропажа данных при смене ориентации
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
08.02.2016, 12:58     Как запретить смену ориентации при вызове DialogFragment? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
disx, setRequestedOrientation.
Перед применением надо запросить текущую ориентацию и зафиксировать её. По окончании можно вернуть разворот по гироскопу назад. Лень искать полный код, поглядите для начала сюда: http://stackoverflow.com/questions/2...799001#2799001.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
08.02.2016, 13:11     Как запретить смену ориентации при вызове DialogFragment? #3
не проще отключить вообще пересоздание активити при поворотах?

хотя даже и без этого диалоги не пересоздаются при повороте
в чем смысл?
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
08.02.2016, 13:18     Как запретить смену ориентации при вызове DialogFragment? #4
Паблито, не проще. Видимо, плохо читали документацию, где буквально на каждом шагу сказано, что запрет пересоздания активностей - крайний метод, горячо не рекомендуемый создателями Андроида. Может плохо проявить себя в некоторых случаях.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
08.02.2016, 13:32     Как запретить смену ориентации при вызове DialogFragment? #5
есть ссылка на офф документацию где это написано?

чисто логически - пересоздание нужно только если меняется разметка, то есть должен примениться другой лаяут
иначе это пустая трата ресурсов - вызывать onCreate() при каждом повороте


да, и хотелось бы услышать когда это может вылезти боком?

Добавлено через 9 минут
и самостоятельно отвечу на риторические вопросы
Примечание. Самостоятельная обработка изменения конфигурации может значительно затруднить использование альтернативных ресурсов, так как система не применяет их автоматически. Этот подход может применяться в крайнем случае, когда необходимо избежать перезапуска в результате изменения конфигурации, и для большинства приложений его использование не рекомендуется.
подчеркнул основную мысль для тех, кто читает по-диагонали
если у активити тупо одна разметка и при повороте никакие ДРУГИЕ ресурсы не успользуются, например для какие-то текстовые поля меняют название при повороте, то запрет пересоздания только разгрузит систему

иначе, естественно, пересоздание активти лучше всего
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
08.02.2016, 13:49     Как запретить смену ориентации при вызове DialogFragment? #6
Цитата Сообщение от Паблито Посмотреть сообщение
подчеркнул основную мысль для тех, кто читает по-диагонали
Вот-вот, а теперь подумайте, кто читает по диагонали. Хотел привести ту же ссылку (http://developer.android.com/intl/ru...dlingTheChange) + надо поискать ещё несколько, где об этом сказано в контексте запуска потоков и работы с памятью, но искать лень.
Случаи с текстовыми полями в расчёт брать не будем, т.к. это не общий случай.
Цитата Сообщение от Паблито Посмотреть сообщение
хотелось бы услышать когда это может вылезти боком?
Например, в тех случаях, которые не указаны в android:configChanges, а такие существуют.

Добавлено через 4 минуты
Да, вспомнил случай, который рекомендуется для запрета пересоздания активностей. Это воспроизведение видео. Об этом часто пишу авторы программ как о единственном случае.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
08.02.2016, 13:49     Как запретить смену ориентации при вызове DialogFragment? #7
CoolMind, Паблито, мне кажется что все как-то не так поняли изначальную фразу про запрет пересоздания при перевороте и понеслась... Запрещать можно и нужно в некоторых случаях, НО это не освобождает от обработки пересоздания активити т.к. она пересоздается не только при поворотах, есть еще куча способов ее пересоздать.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
08.02.2016, 13:51     Как запретить смену ориентации при вызове DialogFragment? #8
Spelcrawler, согласен.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
08.02.2016, 13:53     Как запретить смену ориентации при вызове DialogFragment? #9
вобщем как я и предполагал - пруфов нет, они как бы где-то есть, но их нет

Цитата Сообщение от Spelcrawler Посмотреть сообщение
она пересоздается не только при поворотах, есть еще куча способов ее пересоздать
да это понятно, тут речь идет о том, стоит ли вообще ее пересоздавать если сменилась ориентация экрана
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
08.02.2016, 14:06     Как запретить смену ориентации при вызове DialogFragment? #10
Цитата Сообщение от Паблито Посмотреть сообщение
вобщем как я и предполагал - пруфов нет, они как бы где-то есть, но их нет
Сам привёл пруф, где написано, что для большинства приложений его использование не рекомендуется, и радуется, как ребёнок.

Добавлено через 2 минуты
И это... я не буду искать что-то ради человека, который проявил себя как хам. Не стану унижаться.
Pablito
2455 / 1900 / 591
Регистрация: 12.05.2014
Сообщений: 6,702
Завершенные тесты: 1
08.02.2016, 14:08     Как запретить смену ориентации при вызове DialogFragment? #11
в той цитате я выделил главную мысль что бы не возникло затруднений в понимании
они говорят о случае, если есть альтернативные ресурсы

про "выйдет боком" я отписал выше, когда, как и почему выйдет - никто не знает, но страшная история рассказывается на ночь регулярно
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
08.02.2016, 14:32     Как запретить смену ориентации при вызове DialogFragment? #12
Цитата Сообщение от Паблито Посмотреть сообщение
когда, как и почему выйдет - никто не знает
Только выше было указано, что
Цитата Сообщение от Spelcrawler Посмотреть сообщение
она пересоздается не только при поворотах, есть еще куча способов ее пересоздать
и
Цитата Сообщение от CoolMind Посмотреть сообщение
в тех случаях, которые не указаны в android:configChanges
Дальше уже больше похоже на демагогию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2016, 11:03     Как запретить смену ориентации при вызове DialogFragment?
Еще ссылки по теме:
Потеря потока при смене ориентации Android
Android Как реализовать Синхронное выполнение двух функций при вызове AsyncTask
Android Обнуляется массив при смене ориентации устройства
SurfaceView при изменении ориентации экрана перегружается Android
Android Потеря вывода при смене ориентации экрана

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

Или воспользуйтесь поиском по форуму:
disx
20 / 20 / 0
Регистрация: 26.02.2014
Сообщений: 533
Записей в блоге: 1
09.02.2016, 11:03  [ТС]     Как запретить смену ориентации при вызове DialogFragment? #13
CoolMind, Паблито, Spelcrawler Ооооо-й ребят , не готов поддержать дискуссию из-за отсутствия таких знаний как у Вас ...

но проблему c запретами решил пока так (не знаю на сколько правильно, но работает красиво):

в активити:
Java
1
2
3
4
5
6
7
int orient = getResources().getConfiguration().orientation;
 
                  if (orient==2) {
                      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                      dialog.show(getFragmentManager(), "dialog");
                    
                  }else dialog.show(getFragmentManager(), "dialog");
фрагмент:
Java
1
2
3
4
5
6
7
8
9
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
.....
@Override
    public void onPause() {
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
        super.onPause();
    }
теперь появилась другая, GPS-координаты через интерфейс транслируются из активити в этот диалог, и если вызывать его из положения лежа(landscape), то активити как видно из кода становится portrait, появляется диалог, но координаты теперь не отображаются/не изменяются в диалоге, почему так может быть???

Добавлено через 18 часов 57 минут
Паблито, CoolMind, короче в манифесте->активити написал
XML
1
android:configChanges="orientation|screenSize"
а во фрагменте так:
Java
1
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
все вроде работает и отображается.
Yandex
Объявления
09.02.2016, 11:03     Как запретить смену ориентации при вызове DialogFragment?
Ответ Создать тему
Опции темы

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