1

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

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

当我切换方向时,TextView不再从同一个Handler.

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

发生了什么?!

4

3 回答 3

0

当你切换方向时,android会创建新视图。我建议使 mHandler 易变。如果你决定只使用一个方向,对于横向添加android:screenOrientationandroid 清单中的活动标签

于 2012-06-21T16:25:23.363 回答
0

您无法再更新的原因是因为 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 将不会在定向时被调用。

于 2014-11-07T07:57:35.000 回答
-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
  }
}
于 2012-06-21T15:37:44.063 回答