我有一个Activity
TextView
,使用通常的findViewById
方法创建,使用我的xml布局文件中的定义。
我正在使用在onCreate()
方法中创建的处理程序更新TextView中的文本。
当我切换方向时,TextView
不再从同一Handler
更新。
如果我的xml定义指出android:text="blabla"
的值,那么我在视图中看到"blabla"
,但无法再更新它。
发生了什么事??
答案 0 :(得分:0)
当你切换方向时,android创建新视图。 我建议让mHandler变得不稳定。 如果你决定只使用一个方向,那么在android manifest
中的activity标签中添加android:screenOrientation
答案 1 :(得分:0)
你不能再更新的原因是因为活动参考不同。
您首次创建的活动' A',有处理程序' a'。
现在处理程序' a'只能更新属于活动' A'。
的视图因此,当定位发生时,活动' A'被摧毁,活动' B'和处理程序' b'已创建。
所以' a'无法在屏幕前更新B&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在定位时不会被调用。
答案 2 :(得分:-1)
尝试使用,
@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
}
}