Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
1

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

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

Добрый день!
Имеется две ориентации: портреная и альбомная. Альбомная лежит в папке layout-land, портреная layout. При смене ориентации метод create вызывается снова, что сказывается на производительности.
Хотелось бы, что бы метод не вызывался повторно. Подскажите, как это сделать. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2014, 15:59
Ответы с готовыми решениями:

Смена ориентации экрана
в папке layout файл screen.xml <?xml version="1.0" encoding="utf-8"?>...

Смена ориентации экрана перезапускает приложение
Создаю на своем мобильном приложении. На очередном этапе заметил, что смена...

Смена ориентации на планшете и запрет на телефоне
Требуется, что бы программа анализировала где запущена (на планшете или...

Кнопка "домой", смена ориентации и прочее :)
Добрый вечер уважаемые. не могу решить вот такую проблему: Сделал пример...

Как заблокировать альбомную ориентацию?
Как заблокировать альбомную ориентацию, но не во всем приложении, а только в...

16
Vladimirys
312 / 209 / 27
Регистрация: 16.01.2010
Сообщений: 610
08.08.2014, 17:51 2
Запретить смену ориентации. Других вариантов быть не может.
1
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
08.08.2014, 18:24  [ТС] 3
Зачем же запрещать, если у меня два layout для одной activity, для этого и создавалось две, что бы все было компактно в любой ориентации. Возможно, вы не совсем поняли мой вопрос?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
08.08.2014, 19:04 4
никак в общем-то. Потому что пересоздаётся активити. Можно конечно поставить флаг в манифесте, но тогда активити не будет брать другой лейаут.
1
Vladimirys
312 / 209 / 27
Регистрация: 16.01.2010
Сообщений: 610
08.08.2014, 19:35 5
Цитата Сообщение от suvorov Посмотреть сообщение
Возможно, вы не совсем поняли мой вопрос?
Возможно вы не поняли мой ответ. Невозможно так сделать. При смене ориентации, активити пересоздается, и это неминуемо ведет к вызову OnCreate(). Таков жизненный цикл активити, и влиять на это, мы не можем.
http://stackoverflow.com/questions/8...se-methods-for
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
08.08.2014, 20:00 6
Ну можно же например сделать boolean isFirstRun; и после первого создания установить его в false. И все методы в onCreate() делать в
Java
1
2
3
4
if(isFirstRun){
//Тут весь код из onCreate()
isFirstRun = false;
}
И все, при повороте не будет перезапускаться, а если нужно перезапустить - установить isFirstRun = true; и далее onCreate();
0
Vladimirys
312 / 209 / 27
Регистрация: 16.01.2010
Сообщений: 610
09.08.2014, 15:16 7
Цитата Сообщение от Spelcrawler Посмотреть сообщение
И все, при повороте не будет перезапускаться, а если нужно перезапустить - установить isFirstRun = true; и далее onCreate();
А при таком раскладе, разве будет удовлетворено требование ТС
Цитата Сообщение от suvorov Посмотреть сообщение
же запрещать, если у меня два layout для одной activity, для этого и создавалось две, что бы все было компактно в любой ориентации.
ТС, хочет, чтобы интерфейс менялся, а вот метод не вызвался. Ну примерно как, если бы девственница, была девственницой всю жизнь, а не только до первого раза.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
09.08.2014, 15:20 8
Ну ок, в if(isFirstRun){} засунуть только то что ему нужно запустить 1 раз, а изменение интерфейса просто в onCreate(). И вообще есть же onResume() если прописать там что то, при перевороте onCreate не должен вызываться.
1
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
09.08.2014, 18:20  [ТС] 9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
if(isFirstRun){
//Тут весь код из onCreate()
isFirstRun = false;
}
Подскажите, где в коде объявить isFirstRun?

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

Добавлено через 1 час 47 минут
Цитата Сообщение от Vladimirys Посмотреть сообщение
При смене ориентации, активити пересоздается, и это неминуемо ведет к вызову OnCreate()
Значит совсем нет решения? Как же тогда работают калькуляторы с двумя layout's?
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
10.08.2014, 00:19 14
По-моему смена ориентации неминуемо ведет к onPause() onStart() и onResume() а onCreate() толбко при первой загрузке.
0
Vladimirys
312 / 209 / 27
Регистрация: 16.01.2010
Сообщений: 610
10.08.2014, 14:58 15
Цитата Сообщение от suvorov Посмотреть сообщение
Значит совсем нет решения? Как же тогда работают калькуляторы с двумя layout's?
Насчет решения не знаю. Вы же спрашивали как не вызывать OnCreate()? Вообще, не должно ничего тормозить.
Вы надеюсь туда - в OnCreate() "циклов и прочих потоков не напихали"? Ну или там невероятносно тяжелый интерфейс с 20 и более вложениями.
0
ILNAR_93
Android
237 / 237 / 49
Регистрация: 19.01.2013
Сообщений: 1,881
Записей в блоге: 3
10.08.2014, 15:27 16
Цитата Сообщение от suvorov Посмотреть сообщение
При смене ориентации, переменная isFirstRun всегда равна true.
ну так и будет т.к. ативити заново создается и создаются новые переменные

думаю если использовать данный подход то переменную следует делать глобальной т.е. определять в классе наследника Application ...
0
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
10.08.2014, 21:17  [ТС] 17
Цитата Сообщение от Vladimirys Посмотреть сообщение
Вы надеюсь туда - в OnCreate() "циклов и прочих потоков не напихали"?
Как раз в onCreate() и вызывается метод, который делает запросы в БД, который длится около секунды, но при повороте это заметно
0
10.08.2014, 21:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.08.2014, 21:17

Добавить условие, чтобы скрипт не работал в портретной ориентации экрана
Есть скрипт. Заставляет строчку меню прилипать к верху экрана при скроле...

AutoLayout и смена ориентации
Добрый день! Использую AutoLayout. При повороте экрана все растягивается как...

Смена ориентации координат
как сделатьтак, чтобы вертикалинвя координата была направленна не вниз, а вверх?


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

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

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