2011-06-15 10 views
8

Me doy cuenta de que hay un par de otras publicaciones sobre este tema, sin embargo, las soluciones para esas publicaciones no me funcionan.Android onConfigurationChanged() no se está llamando en la Actividad

Básicamente, quiero dejar que mi actividad no se reinicie después de un cambio de orientación del dispositivo. Para ello, he modificado la actividad en el archivo de manifiesto:

 <activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden"></activity> 

y he anulado en mi Actividad:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    System.out.println("IN onConfigurationChanged()"); 
} 

Sin embargo, la actividad se sigue reiniciando a un cambio de orientación, y el método no se está llamando.

¿Alguien sabe por qué esto puede estar pasando?

Respuesta

0

si define configchanges = orientation en su manifiesto, entonces la actividad no se reiniciará, sino que onConfigurationChanged será invocada como lo ha implementado actualmente. Primero intente iniciar sesión con Log Log Class (esta es la manera correcta de registrar cosas en Android, no use System out para esto, se considera una mala práctica) y antes de super, pero eso es solo un 1% de probabilidad de que solucione lo te está pasando a ti.

El segundo caso es que tiene la actividad actual anidada en un tabHost por ejemplo o grupo de actividades. si su actividad tiene una actividad principal, entonces se debe agregar el cambio de configuración en esa y la devolución de llamada se realizará allí.

Si ese es el caso y desea reenviar el resultado o también hacer algo en el hijo, entonces necesita obtener una referencia al hijo en el elemento primario y llamar a un método para los cambios.

+0

Mi actividad se extiende ListActivity, es que ¿A qué te refieres? – littleK

+0

Bueno, no. me refiero a tener un diseño de pestaña con actividades anidadas o algo así. una actividad de lista no está anidada, es solo un tipo de actividad. – DArkO

1

No debe usar setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); método call en cualquier lugar de su aplicación esto evitará llamar al métodoConfigChanged().

-2

Modefiy su método de onConfigurationChanged a la siguiente

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 
8

Debe utilizar 13 principios activos y de establecer esta configuración, en parte, de su actividad del manifiesto: androide: configChanges = "orientación | keyboardHidden | ScreenSize"

Funciona bien. En toda la versión de Android.

+3

Quizás esto sea obvio para todos excepto para mí, pero esto va en la sección de Actividad del manifiesto. –

+0

Esta es la respuesta correcta y mejor, en la api 13+ de Android, se llama este evento ScreenSize y reinicia la actividad si no se maneja. Muchas gracias. – Darkendorf

+0

Funciona con o no android: screenOrientation definido, o con él configurado en "fullSensor". "sensorPortrait" no funciona. – Robert

0

si tiene un fragmento entonces necesita este también:

void setRetainInstance(boolean retain) 

de control si un fragmento ejemplo se retiene a través de la actividad de re-creación (tal como de un cambio de configuración ).

me encontré con esto y al establecerlo en "true" lo arreglé.

0

He utilizado este, y ayudó:

package="com.s2dio.evallet" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
android:minSdkVersion="8" 
android:targetSdkVersion="8" /> 
+3

NO, esta no es una buena respuesta, debe agregar la opción screenSize a onConfigChanges en manifiesto para manejar +13 versiones de SDK – Tobrun

1

Cambiar el manifiesto a continuación

<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden|screenSize"></activity> 

y se refieren este enlace para obtener una explicación detallada orientation issue

Cuestiones relacionadas