5

OrientationEventListenerイベントを報告しても問題が発生しました。OrientationEventListenerが無効の場合、onOrientationChanged()が呼び出されています

私はタブレイアウトで3つのフラグメントを扱っていますが、いずれかのフラグメントだけが方向変更を必要としています。私がこの断片から離れていくと、オリエンテーションの出来事が止まるようにしたい。デバイスを移動させながらIフラグメントを切り替えるとき

@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)にコールしようとすると、コールはnullを返します。つまり、使用しようとするとnullポインタ例外が発生します。

ここでヌルチェックを追加することはできますが、リスナーを明確に無効にしたときにオリエンテーションイベントを取得する理由を知りたいだけです。障害点でOrientationEventListenerを調べると、mEnabled=falseと報告されます。イベントがリスナーに伝播しないようにする方法はありますか?

+0

こんにちはSleeke、これにはどんな解決策も見つかりました。私は同じ問題に直面しています。 –

答えて

0

オリエンテーションをActivityInfo.SCREEN_ORIENTATION_SENSORに設定すると、物理的な向きセンサーによってアクティビティが自動的にローテーションされます。 https://developer.android.com/reference/android/R.attr.html#screenOrientation

これを解決するには、アクティビティの方向モードをリセットします。たとえば、既定のポートレートレイアウトにリセットします。

mOrientationEventListener.disable(); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
関連する問題