5

Ho un problema con un evento di segnalazione OrientationEventListener anche dopo averlo disabilitato.onOrientationChanged() viene chiamato quando OrientationEventListener è disabilitato

Sto lavorando con tre frammenti in un layout di tabulazione e solo uno dei frammenti richiede modifiche di orientamento. Quando mi allontano da questo frammento, voglio che gli eventi di orientamento smettano di avere un effetto.

La porzione del ciclo di vita del mio codice è il seguente:

@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(); 
} 

Il problema nasce quando passo il frammento durante lo spostamento del dispositivo. Quando provo a chiamare getActivity() in onOrientationChanged(int angle) di OrientationEventListener, la chiamata restituisce null, il che significa che ottengo un'eccezione di puntatore nullo se provo ad usarlo.

Mentre potrei aggiungere un controllo null qui, voglio solo sapere perché sto ottenendo un evento di orientamento quando ho disabilitato chiaramente l'ascoltatore. Se ispeziono il OrientationEventListener al punto di errore, riporta anche mEnabled=false. C'è un modo per impedire la propagazione dell'evento al mio ascoltatore?

+0

Ciao Sleeke, hai trovato una soluzione per questo. Sto affrontando lo stesso problema. –

risposta

0

Se si imposta l'orientamento su ActivityInfo.SCREEN_ORIENTATION_SENSOR, l'attività verrà automaticamente ruotata dal sensore di orientamento fisico. https://developer.android.com/reference/android/R.attr.html#screenOrientation

Risolvere questo ripristinando la modalità di orientamento per l'attività. Ad esempio, ripristina il layout verticale predefinito:

mOrientationEventListener.disable(); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
Problemi correlati