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

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

Войти
Регистрация
Восстановить пароль
 
syslik
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 38
#1

Поведение после смены ориентации экрана - Программирование Android

04.05.2015, 16:41. Просмотров 619. Ответов 5
Метки нет (Все метки)

Доброго времени суток.
У меня есть 2 xml layout файла для вертикальной и горизонтальной ориентации дисплея c тем самим набором елементов. После нажатие клавиши я меняю текст в TextView следующим образом:
Java
1
((TextView) findViewById(R.id.mytextview)).setText(mytext);
Все работает хорошо. Но после того, как я меняю ориентацию дисплея, и пробую менять текст mytextview - он не меняеться. Ошыбки(Exception) нет, код выполняється, но нового текста не выводит.
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2015, 16:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поведение после смены ориентации экрана (Программирование Android):

GoogleMap. Восстановление карты после смены ориентации экрана - Программирование Android
GoogleMap V2. Через onSaveInstanceState / onRestoreInstanceState восстанавливаю тип карты, маркеры и положение камеры. Но может есть...

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

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

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

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

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

5
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
07.05.2015, 00:30 #2
syslik, привет, не очень понятно, что не работает. Попробуйте вместо mytext написать, например, "Привет!" и проверить. Если выводит, значит, проблема в переменной. Надо сохранять и восстанавливать значение через метод onSaveInstanceState.
0
syslik
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 38
09.05.2015, 16:51  [ТС] #3
Проблема не в переменной. При дебаге я вижу значение переменной, но ее значение не выводиться в TextView.
Все хорошо работает до того времени как я поворачиваю екран. Потом провожу такие же действия как и раньше, но TextView не работает, не выводит новых текстов. Может проблема в том что у меня есть 2 xml лейаута для разной ориентации с елементами с таким же ІД и так делать не надо...не знаю даже.
0
CoolMind
419 / 402 / 65
Регистрация: 06.10.2012
Сообщений: 1,727
11.05.2015, 01:30 #4
syslik, тогда покажите оба xml с разметкой. Они должны быть достаточно похожи, иначе программа может обращаться не к тем элементам после смены ориентации экрана. После смены выполняется повторно весь цикл жизнедеятельности активности: onCreate, onResume, onStart и т.д. Поглядите, как там инициализируются переменные.
0
syslik
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 38
04.06.2015, 20:12  [ТС] #5
Сорри, не видел Вашего ответа.

xml разметки у меня почти идентичнЬІ. Разница только в том, то в лендскейпе компонентЬІ размещаються горизонально, а в портреит - вертикально. Там тупо копипаст, поменял просто android:orientation для LinearLayout.

Метод onCreate следующий:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_pult);
  ....
  refreshDisplay();
}
 
private void refreshDisplay() {
  runOnUIThread(new Runnable() {
    @Override
    public void run() {
      MyData obj = MyData.getInstance();
 
      ((TextView)findViewById(R.id.mytextview)).setText(obj.getText());
    }
  });
}
Интересная ситуация происходит при следуещих оперициях:
1. Запускаю програму (Пусть будет вертикалнЬІ дисплей).
2. Нажимаю кнопку, которая меняет текст MyData, вЬІзЬІвает рефреш дисплея, и новЬІй текст вЬІводиться на екране. Все пока хорошо.
3. Поворачиваю екран. ВЬІзиваеться рефреш дисплея из метода onCreate. TextView отображает текст из обекта MyData. Все хорошо.
4. Опять нажимаю кнопку, которая меняет текст MyData, вЬІзЬівает рефреш дисплея, но новЬІй текст не вЬІводиться в TextView. Там остаеться старЬІе текст. Но при дебаге после задания текст я пробую сразу получить что находиться в TextView. И там находить новЬІй текст. Но отображается по прежднему старЬІй текст.
5. Поворачиваю екран опять. ВЬІполняеться то что же и в пункте 3. Тоесть начинает отображаться новое значение из MyData.
6. Нажимаю на кнопку сменЬІ текста, происходит поведение как при пункте 4.
Тоесть после первого вращения екрана, TextView оновляеться только после следующих вращениях (только тогда метод refreshDisplay работает так как нужно).

Хотел попробовать написать маленькую тестовою програму чтоб воспроизвести такое же поведение..но не смог...в тестовой програме все работает хорошо (
0
syslik
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 38
05.06.2015, 23:46  [ТС] #6
Заработало! Ура!

Суть в том, что я жду новЬІе даннЬІе от сервера. Когда даннЬІе поступают от сервера, вЬІзЬІваю соответсвеннЬІй метод для подписанЬІх на данное собЬІтие активности. Что-то такое:
Java
1
2
3
for(ICommunication item: listeners) {
  item.receiveData(data); //item - моя активити
}
Мой метод onCreate содержЬІт следующую логику: Если соединения еще нет (програма включаеться первЬІй раз) - тогда нужно установить соединение и подисЬІваем нашу аквити на даное собЬІтие. Если соединение уже есть (поворот дисплея), то ничего не делаем, просто сохраням ссЬІлку на ето соединие.
Проблема бЬІла в том, что после поворота екрана активити, подписаное на прием данЬІе от сервера старое.
Нагуглил похожую проблему: http://stackoverflow.com/questions/1...-screen-rotate

Я говорил о нажатие кнопки для абстракции, типа просто делаеться действие, которое меняет текст. И вот на етом и попалился.

Спасибо за помощь.
0
05.06.2015, 23:46
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2015, 23:46
Привет! Вот еще темы с ответами:

Задний фон при смене ориентации экрана - Программирование Android
Здравствуйте! Мне надо чтобы фон не сжимался так, а как в HTML оптимизировал под размер экрана... Заранее спасибо! (Приложение и картинка...

При смене ориентации экрана накладываются фрагменты - Программирование Android
Юзаю Android.Support.V4.App.Fragment, вроде бы все нормально. При переключении из меню фрагменты скрываю отправляя в "стек" а кликнутый...

SurfaceView при изменении ориентации экрана перегружается - Программирование Android
при создании тетриса возник вопрос. один из моих классов расширяет класс SurfaceView public class TetrisView extends SurfaceView ...

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


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

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

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