我需要在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
}
答案 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">