После переключения ориентации TextView больше не обновляется

1

У меня есть Activity с TextView, созданный в обычном методе findViewById, используя определение из моего файла макета xml.

Я обновляю текст в TextView с помощью обработчика, созданного в onCreate().

Когда я переключаю ориентацию, TextView больше не обновляется из того же Handler.

Если в моем определении xml указано значение для android:text="blabla", тогда я вижу "blabla" в представлении, но больше не могу его обновлять.

Что происходит?!

  • 0
    Вам нужно будет опубликовать свой код (сокращенно только для соответствующих частей). Это почти гарантированный порядок событий, когда ссылка на ваш TextView обновляется до нового экземпляра, а ваш обработчик указывает на старый.
  • 1
    onConfigurationChanged больше кода и никогда не полагайтесь на onConfigurationChanged в качестве последнего средства.
Показать ещё 4 комментария
Теги:

3 ответа

0

Причина, по которой вы больше не можете обновляться, связана с тем, что ссылка на действие отличается.

Ваша первая созданная операция "A" имеет обработчик "a".

Теперь обработчик "a" может только обновить представление, которое принадлежит Activity "A".

Поэтому, когда происходит ориентация, действие "A" уничтожается, и создается действие "B" и обработчик "b".

Поэтому "a" не может обновить "B" перед экраном.

Для быстрого решения я рекомендую отключить повторное создание активности при повороте мобильной ориентации.

AndroidManifest.xml

<activityandroid:name=".MyActivity"
          android:configChanges="orientation|keyboardHidden|screenSize"
          android:label="@string/app_name">

Мероприятия

@Override
public void onConfigurationChanged(Configuration newConfig){
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if(newConfig.orientation ==Configuration.ORIENTATION_LANDSCAPE){
        Toast.makeText(this,"landscape",Toast.LENGTH_SHORT).show();
    }elseif(newConfig.orientation ==Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this,"portrait",Toast.LENGTH_SHORT).show();
    }
}

теперь onCreate не будет вызываться при ориентации.

0

Когда u переключает ориентацию, android создает новый вид. Я бы предложил сделать этот mHandler неустойчивым. Если вы решите использовать только одну ориентацию, для ландшафта добавьте android:screenOrientation в теге активности в манифесте android

-2

Попробуйте использовать,

@Override
public void onConfigurationChanged(Configuration newConfig) {

  super.onConfigurationChanged(newConfig);

  if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
      //your code
  } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
     //your code
  }
}
  • 0
    android:configChanges="orientation" - это не что иное, как повязка. Существует много способов изменения конфигурации. Например, если пользователь выбирает новый язык (т. Е. Языковой стандарт изменился), действие будет перезапущено так же, как при изменении ориентации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню