5

我需要处理Android应用程序中的方向更改。为此目的,我决定使用OrientationEventListener便利课。但他的回调方法有一些奇怪的行为。处理方向变化时的问题

我的应用程序开始在人像模式,然后最终切换到lanscape之一。我有一些自定义代码在回调onOrientationChanged方法中执行,它提供了一些额外的UI处理逻辑 - 它有几个调用findViewById。 奇怪的是,当从横向切换回肖像模式onOrientationChanged回调被称为两次,甚至更糟 - 第二个电话正在处理不好Context - findViewById方法开始返回null。这些电话是从MainThread

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    listener = new OrientationListener(); 
} 

    @Override 
protected void onResume() {  
    super.onResume(); 
    // enabling listening 
    listener.enable(); 
} 
    @Override 
protected void onPause() { 
    super.onPause(); 
    // disabling listening 
    listener.disable(); 
} 

权利而作出我复制与虚拟Activity相同的行为,而不只是一个带有定向hadling涉及任何逻辑。 我按按Ctrl + F11 出了什么问题发起朝向切换从Android 2.2模拟器?

UPD: 内部类实现OrientationEventListener

private class OrientationListener extends OrientationEventListener { 
    public OrientationL() { 
     super(getBaseContext()); 
    } 

    @Override 
    public void onOrientationChanged(int orientation) { 

     toString(); 

    } 
} 

}

+1

请发表您的onOrientationChanged代码太 – 2010-06-07 08:58:02

+1

你有一个真正的手机上测试时试过这种?我遇到了一些方向变化的问题,只有在模拟器上测试时才会发生。它与模拟器假定屏幕方向改变有关 - 我也有一个问题,它重新创建应用程序两次。 – 2010-06-07 10:56:00

+0

可惜的是我没有获得真正的手机现在 – nixau 2010-06-07 11:07:00

回答

5

这是仅在模拟器中记录的错误。真正的设备不会表现出这种双生命周期事件行为。我前段时间遇到了同样的问题,并且它在真实设备上消失。

,我建议只检测一个方向取向的变化,直到你得到你的手物理的手机上,如果你能忽略的问题。否则,您可以通过保留一个静态布尔值来指示您已经通过第一组生命周期调用来“跳过”第二组生命周期调用。

更多信息,请参见this issue report

+0

相比对摩托罗拉XOOM一些麻烦是更好的解决方案的onCreate调用两次连续过 http://stackoverflow.com/posts/3922257 – RzR 2012-01-05 11:06:16

3

您是否尝试过使用onConfigurationChanged?

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
if(newConfig.equals(Configuration.ORIENTATION_LANDSCAPE)… 
+0

我使用'findViewById'方法得到同样的问题。这很奇怪,但似乎'.xml'文件中指定的声明式布局还没有渲染。 – nixau 2010-06-07 10:17:03

+0

反正onConfigurationChanged似乎在与OrientationEventListener回调订阅 – nixau 2010-06-08 09:00:15

1

添加安卓清单文件configChanges =“方向”在活动标签一样

<activity android:label="@string/app_name" android:configChanges="orientation" android:name=".com.androidpeople">