我需要处理我的 Android 应用程序中的方向更改。为此,我决定使用OrientationEventListener
便利类。但是他的回调方法被赋予了一些奇怪的行为。
我的应用程序以纵向模式启动,然后最终切换到横向模式。我在回调onOrientationChanged
方法中执行了一些自定义代码,提供了一些额外的 UI 处理逻辑 - 它有一些对findViewById
. 奇怪的是,当从横向模式切换回纵向模式时,onOrientationChanged
回调被调用了两次,更糟糕的是 - 第二次调用正在处理bad 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
没有任何逻辑的假人复制了相同的行为,除了一个处理方向问题的逻辑。我通过按Ctrl+F11从 Android 2.2 模拟器启动方向切换
可能出了什么问题?
Upd:实现的内部类OrientationEventListener
private class OrientationListener extends OrientationEventListener {
public OrientationL() {
super(getBaseContext());
}
@Override
public void onOrientationChanged(int orientation) {
toString();
}
}
}