处理方向更改时出现问题

时间:2010-06-07 08:42:28

标签: android android-emulator screen-orientation android-2.2-froyo

我需要在Android应用程序中处理方向更改。为此我决定使用OrientationEventListener便利班。但他的回调方法给出了一些奇怪的行为。

我的应用程序以纵向模式启动,然后最终切换到lanscape。我在回调onOrientationChanged方法中执行了一些自定义代码,它提供了一些额外的UI处理逻辑 - 它只有几次调用findViewById。 奇怪的是,当从横向模式切换回纵向模式时onOrientationChanged回调被调用两次,甚至更糟 - 第二次调用是处理错误 Context - {{ 1}}方法开始返回findViewById。这些调用直接来自 MainThread

null

我用虚拟 @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(); } 复制了相同的行为,没有任何逻辑,除了处理定向哈希的那个。 我通过按 Ctrl + F11 从Android 2.2模拟器启动方向切换 可能有什么不对?

UPD: 实现Activity

的内部类
OrientationEventListener

}

3 个答案:

答案 0 :(得分:5)

这只是模拟器中记录的错误。真实设备不会展示此双生命周期事件行为。我不久前遇到了同样的问题,它在真实的设备上消失了。

如果您只能在一个方向上测试方向更改,直到您将手放在物理电话上,我建议您忽略此问题。否则,您可以通过保持静态布尔值来“跳过”第二组生命周期调用,指示您已经完成了第一组。

有关详细信息,请参阅this issue report

答案 1 :(得分:3)

您是否尝试过使用onConfigurationChanged?

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

答案 2 :(得分:1)

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

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