Android 处理方向更改时出现的问题

Android 处理方向更改时出现的问题,android,android-emulator,screen-orientation,android-2.2-froyo,Android,Android Emulator,Screen Orientation,Android 2.2 Froyo,我需要处理Android应用程序中的方向更改。为此,我决定使用OrientationEventListener便利类。但是他的回调方法有点奇怪 我的应用程序以纵向模式启动,然后最终切换到lanscape模式。我在callbackonOrientationChanged方法中执行了一些自定义代码,该方法提供了一些额外的UI处理逻辑-它有一些对findViewById的调用。 奇怪的是,当从横向模式切换回纵向模式时,onOrientationChanged回调被调用两次,更糟糕的是,第二次调用处理的

我需要处理Android应用程序中的方向更改。为此,我决定使用
OrientationEventListener
便利类。但是他的回调方法有点奇怪

我的应用程序以纵向模式启动,然后最终切换到lanscape模式。我在callback
onOrientationChanged
方法中执行了一些自定义代码,该方法提供了一些额外的UI处理逻辑-它有一些对
findViewById
的调用。 奇怪的是,当从横向模式切换回纵向模式时,
onOrientationChanged
回调被调用两次,更糟糕的是,第二次调用处理的是bad
上下文
-
findViewById
方法开始返回
null
。这些调用直接从主线程进行

我用一个虚拟的
活动
复制了相同的行为,没有任何逻辑,除了一个处理方向阴影的逻辑。 我通过按Ctrl+F11从Android 2.2模拟器启动方向切换 有什么不对劲吗

Upd: 实现
OrientationEventListener

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

    @Override
    public void onOrientationChanged(int orientation) {

        toString();

    }
}

}您是否尝试过使用OnConfiguration Changed

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

这是仅在emulator中记录的错误。真正的设备不会表现出这种双重生命周期事件行为。不久前我也遇到过同样的问题,它在一台真正的设备上消失了

我建议忽略这个问题,如果可以的话,只测试一个方向上的方向变化,直到你拿到一部物理手机。否则,您可以通过保留一个静态布尔值来“跳过”第二组生命周期调用,表明您已经完成了第一组调用


请参阅以了解更多信息。

在活动标记的清单文件中添加android:configChanges=“orientation”
,如



请将您的OnOrientation更改后的代码张贴到手机上进行测试时是否尝试过此功能?我在方向改变方面遇到了一些问题,这些问题只有在模拟器上测试时才会发生。这与仿真器伪造屏幕方向改变有关-我也有一个问题,它两次重新创建应用程序。不幸的是,我现在没有访问真实手机的权限。我编写了一个描述仿真器错误的程序。我在
findViewById
方法中遇到了同样的问题。奇怪的是,
.xml
文件中指定的声明性布局似乎尚未呈现。无论如何,与OrientationEventListener回调Subscription相比,OnConfiguration Changed似乎是更好的解决方案。在motorola xoom上遇到了一些问题,onCreate也被一行调用了两次
@Override
public void onConfigurationChanged(Configuration newConfig) {
 if(newConfig.equals(Configuration.ORIENTATION_LANDSCAPE)…