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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
#1

Смена ориентации с портретной на альбомную методом create - Программирование Android

08.08.2014, 15:59. Просмотров 1591. Ответов 16
Метки нет (Все метки)

Добрый день!
Имеется две ориентации: портреная и альбомная. Альбомная лежит в папке layout-land, портреная layout. При смене ориентации метод create вызывается снова, что сказывается на производительности.
Хотелось бы, что бы метод не вызывался повторно. Подскажите, как это сделать. Спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vladimirys
306 / 203 / 24
Регистрация: 16.01.2010
Сообщений: 578
08.08.2014, 17:51     Смена ориентации с портретной на альбомную методом create #2
Запретить смену ориентации. Других вариантов быть не может.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
08.08.2014, 18:24  [ТС]     Смена ориентации с портретной на альбомную методом create #3
Зачем же запрещать, если у меня два layout для одной activity, для этого и создавалось две, что бы все было компактно в любой ориентации. Возможно, вы не совсем поняли мой вопрос?
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
08.08.2014, 19:04     Смена ориентации с портретной на альбомную методом create #4
никак в общем-то. Потому что пересоздаётся активити. Можно конечно поставить флаг в манифесте, но тогда активити не будет брать другой лейаут.
Vladimirys
306 / 203 / 24
Регистрация: 16.01.2010
Сообщений: 578
08.08.2014, 19:35     Смена ориентации с портретной на альбомную методом create #5
Цитата Сообщение от suvorov Посмотреть сообщение
Возможно, вы не совсем поняли мой вопрос?
Возможно вы не поняли мой ответ. Невозможно так сделать. При смене ориентации, активити пересоздается, и это неминуемо ведет к вызову OnCreate(). Таков жизненный цикл активити, и влиять на это, мы не можем.
http://stackoverflow.com/questions/8...se-methods-for
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
08.08.2014, 20:00     Смена ориентации с портретной на альбомную методом create #6
Ну можно же например сделать boolean isFirstRun; и после первого создания установить его в false. И все методы в onCreate() делать в
Java
1
2
3
4
if(isFirstRun){
//Тут весь код из onCreate()
isFirstRun = false;
}
И все, при повороте не будет перезапускаться, а если нужно перезапустить - установить isFirstRun = true; и далее onCreate();
Vladimirys
306 / 203 / 24
Регистрация: 16.01.2010
Сообщений: 578
09.08.2014, 15:16     Смена ориентации с портретной на альбомную методом create #7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
И все, при повороте не будет перезапускаться, а если нужно перезапустить - установить isFirstRun = true; и далее onCreate();
А при таком раскладе, разве будет удовлетворено требование ТС
Цитата Сообщение от suvorov Посмотреть сообщение
же запрещать, если у меня два layout для одной activity, для этого и создавалось две, что бы все было компактно в любой ориентации.
ТС, хочет, чтобы интерфейс менялся, а вот метод не вызвался. Ну примерно как, если бы девственница, была девственницой всю жизнь, а не только до первого раза.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
09.08.2014, 15:20     Смена ориентации с портретной на альбомную методом create #8
Ну ок, в if(isFirstRun){} засунуть только то что ему нужно запустить 1 раз, а изменение интерфейса просто в onCreate(). И вообще есть же onResume() если прописать там что то, при перевороте onCreate не должен вызываться.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
09.08.2014, 18:20  [ТС]     Смена ориентации с портретной на альбомную методом create #9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
if(isFirstRun){
//Тут весь код из onCreate()
isFirstRun = false;
}
Подскажите, где в коде объявить isFirstRun?

Цитата Сообщение от Spelcrawler Посмотреть сообщение
И вообще есть же onResume()
Не поделитесь кодом?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
09.08.2014, 21:49     Смена ориентации с портретной на альбомную методом create #10
Там же где любую другую переменную) Кодом пока не могу - нет компа под рукой.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
09.08.2014, 21:54  [ТС]     Смена ориентации с портретной на альбомную методом create #11
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Там же где любую другую переменную
Java
1
2
3
4
5
6
7
boolean isFirstRun = true;
 
//в методе onCreate
if(isFirstRun){         
    //код
    isFirstRun =false;
}
При смене ориентации, переменная isFirstRun всегда равна true. Может я вас не так понял?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
09.08.2014, 21:59     Смена ориентации с портретной на альбомную методом create #12
Переменные объявляются в теле класса, не в методах. Если вы при первом запуске записываете что то в любую переменную(что то тяжелое) можно проверять ее на null. Если не равна null - не загружать, если равна - загрузить.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
10.08.2014, 00:12  [ТС]     Смена ориентации с портретной на альбомную методом create #13
Да, я объявил ее в теле класса, но все равно переменная всегда равна true.
Разве можно сделать проверку на null? Разве boolean не true или false?

Добавлено через 1 час 47 минут
Цитата Сообщение от Vladimirys Посмотреть сообщение
При смене ориентации, активити пересоздается, и это неминуемо ведет к вызову OnCreate()
Значит совсем нет решения? Как же тогда работают калькуляторы с двумя layout's?
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
10.08.2014, 00:19     Смена ориентации с портретной на альбомную методом create #14
По-моему смена ориентации неминуемо ведет к onPause() onStart() и onResume() а onCreate() толбко при первой загрузке.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 14:58     Смена ориентации с портретной на альбомную методом create
Еще ссылки по теме:
Android Запретить смену ориентации экрана
Событие смены ориентации экрана Android
Потеря потока при смене ориентации Android
Splash Screen растягивается в альбомной ориентации Android
Android Поведение после смены ориентации экрана

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

Или воспользуйтесь поиском по форуму:
Vladimirys
306 / 203 / 24
Регистрация: 16.01.2010
Сообщений: 578
10.08.2014, 14:58     Смена ориентации с портретной на альбомную методом create #15
Цитата Сообщение от suvorov Посмотреть сообщение
Значит совсем нет решения? Как же тогда работают калькуляторы с двумя layout's?
Насчет решения не знаю. Вы же спрашивали как не вызывать OnCreate()? Вообще, не должно ничего тормозить.
Вы надеюсь туда - в OnCreate() "циклов и прочих потоков не напихали"? Ну или там невероятносно тяжелый интерфейс с 20 и более вложениями.
Yandex
Объявления
10.08.2014, 14:58     Смена ориентации с портретной на альбомную методом create
Ответ Создать тему
Опции темы

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