我有一个Activity
with a TextView
,使用我的 xml 布局文件中的定义以通常的findViewById
方法创建。
我正在使用onCreate()
方法中创建的处理程序更新 TextView 中的文本。
当我切换方向时,TextView
不再从同一个Handler
.
如果我的 xml 定义声明了 的值android:text="blabla"
,那么我"blabla"
会在视图中看到,但无法再更新它。
发生了什么?!
我有一个Activity
with a TextView
,使用我的 xml 布局文件中的定义以通常的findViewById
方法创建。
我正在使用onCreate()
方法中创建的处理程序更新 TextView 中的文本。
当我切换方向时,TextView
不再从同一个Handler
.
如果我的 xml 定义声明了 的值android:text="blabla"
,那么我"blabla"
会在视图中看到,但无法再更新它。
发生了什么?!
当你切换方向时,android会创建新视图。我建议使 mHandler 易变。如果你决定只使用一个方向,对于横向添加android:screenOrientation
android 清单中的活动标签
您无法再更新的原因是因为 Activity 引用不同。
您创建的第一个活动“A”具有处理程序“a”。
现在处理程序“a”只能更新属于活动“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 将不会在定向时被调用。
尝试使用,
@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
}
}