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

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

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

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

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

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

SurfaceView при изменении ориентации экрана перегружается Android
Смена ориентации экрана Android
Изменение ориентации экрана Android
Android Потеря вывода при смене ориентации экрана
Android GoogleMap. Восстановление карты после смены ориентации экрана
Выбрасывает из приложения при смене ориентации экрана Android
Событие смены ориентации экрана Android
Android Запретить смену ориентации экрана
Android Смена ориентации экрана перезапускает приложение
Android Задний фон при смене ориентации экрана
Android При смене ориентации экрана накладываются фрагменты
Не отображать SplashScreen при смене ориентации экрана Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
07.05.2015, 00:30     Поведение после смены ориентации экрана #2
syslik, привет, не очень понятно, что не работает. Попробуйте вместо mytext написать, например, "Привет!" и проверить. Если выводит, значит, проблема в переменной. Надо сохранять и восстанавливать значение через метод onSaveInstanceState.
syslik
0 / 0 / 0
Регистрация: 22.05.2009
Сообщений: 38
09.05.2015, 16:51  [ТС]     Поведение после смены ориентации экрана #3
Проблема не в переменной. При дебаге я вижу значение переменной, но ее значение не выводиться в TextView.
Все хорошо работает до того времени как я поворачиваю екран. Потом провожу такие же действия как и раньше, но TextView не работает, не выводит новых текстов. Может проблема в том что у меня есть 2 xml лейаута для разной ориентации с елементами с таким же ІД и так делать не надо...не знаю даже.
CoolMind
418 / 401 / 65
Регистрация: 06.10.2012
Сообщений: 1,723
11.05.2015, 01:30     Поведение после смены ориентации экрана #4
syslik, тогда покажите оба xml с разметкой. Они должны быть достаточно похожи, иначе программа может обращаться не к тем элементам после смены ориентации экрана. После смены выполняется повторно весь цикл жизнедеятельности активности: onCreate, onResume, onStart и т.д. Поглядите, как там инициализируются переменные.
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 работает так как нужно).

Хотел попробовать написать маленькую тестовою програму чтоб воспроизвести такое же поведение..но не смог...в тестовой програме все работает хорошо (
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

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

Спасибо за помощь.
Yandex
Объявления
05.06.2015, 23:46     Поведение после смены ориентации экрана
Ответ Создать тему
Опции темы

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