OrientationEventListener
レポート イベントを無効にした後でも、レポート イベントに問題があります。
タブ レイアウトで 3 つのフラグメントを操作していますが、向きを変更する必要があるのはフラグメントの 1 つだけです。このフラグメントから離れると、オリエンテーション イベントの効果がなくなります。
私のコードのライフサイクル部分は次のとおりです。
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
if (orientationEventListener == null)
{
Log.w(LogTags.MOBILE_MONITOR, "Creating orientationListener in " + this.toString());
orientationEventListener = new OrientationEventListener(getActivity(), SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int angle) {
...Do work using getActivity()...
}
};
}
}
@Override
public void onResume() {
super.onResume();
orientationEventListener.enable();
}
@Override
public void onPause() {
super.onPause();
orientationEventListener.disable();
}
問題は、デバイスの移動中にフラグメントを切り替えると発生します。を呼び出そうとするとgetActivity()
、onOrientationChanged(int angle)
呼び出しOrientationEventListener
は null を返します。これは、それを使用しようとすると null ポインター例外が発生することを意味します。
ここで null チェックを追加することもできますが、リスナーを明らかに無効にしたときに方向イベントが発生する理由を知りたいだけです。OrientationEventListener
障害が発生した時点でを検査すると、 も報告されmEnabled=false
ます。イベントがリスナーに伝播されないようにする方法はありますか?