方向切换后,TextView不再更新

时间:2012-06-21 15:33:26

标签: android

我有一个Activity TextView,使用通常的findViewById方法创建,使用我的xml布局文件中的定义。

我正在使用在onCreate()方法中创建的处理程序更新TextView中的文本。

当我切换方向时,TextView不再从同一Handler更新。

如果我的xml定义指出android:text="blabla"的值,那么我在视图中看到"blabla",但无法再更新它。

发生了什么事??

3 个答案:

答案 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
  }
}