У меня есть Activity
с TextView
, созданный в обычном методе findViewById
, используя определение из моего файла макета xml.
Я обновляю текст в TextView с помощью обработчика, созданного в onCreate()
.
Когда я переключаю ориентацию, TextView
больше не обновляется из того же Handler
.
Если в моем определении xml указано значение для android:text="blabla"
, тогда я вижу "blabla"
в представлении, но больше не могу его обновлять.
Что происходит?!
Причина, по которой вы больше не можете обновляться, связана с тем, что ссылка на действие отличается.
Ваша первая созданная операция "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 не будет вызываться при ориентации.
Когда u переключает ориентацию, android создает новый вид. Я бы предложил сделать этот mHandler неустойчивым. Если вы решите использовать только одну ориентацию, для ландшафта добавьте android:screenOrientation
в теге активности в манифесте android
Попробуйте использовать,
@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
}
}
android:configChanges="orientation"
- это не что иное, как повязка. Существует много способов изменения конфигурации. Например, если пользователь выбирает новый язык (т. Е. Языковой стандарт изменился), действие будет перезапущено так же, как при изменении ориентации.
onConfigurationChanged
больше кода и никогда не полагайтесь наonConfigurationChanged
в качестве последнего средства.