2011-01-06 9 views
5

Mi aplicación con pestañas no vuelve a mostrar la vista con un cambio de orientación.Android Orientation Change

que añade

android:configChanges="keyboardHidden|orientation" 

a la actividad principal de la ficha y para cada actividad en el manifiesto.

I añadieron a cada actividad de este método:

public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.active_alt); 
    mColorLegendBtn = (Button) findViewById(R.id.colorbtn); 
    mStatusView = (TextView) findViewById(R.id.celltitle1); 
    TextView mStatusView1 = (TextView) findViewById(R.id.celltitle2); 
    mStatusView1.setText(mStatusView1.getText()+"testcase1"); 
    mStatusView.setText(mStatusView.getText()+"testcase"); 
    initUI(); 
} 

public void initUI() { 
    l1 = (ListView) findViewById(R.id.ListView01); 
    EfficientAdapter efficientAdapter = new EfficientAdapter(mContext); 
    l1.setAdapter(null); 
    l1.setAdapter(efficientAdapter); 
} 

En el lanzamiento, las pestañas, lista, botón y TextView se muestran correctamente. Cuando cambio la orientación en el emulador, solo las pestañas no muestran ninguno de los otros widgets, la pantalla es negra.

¿Qué me estoy perdiendo?

+0

He tenido un problema muy similar y he encontrado una solución diferente. Se ha manifestado en un par de instancias diferentes. Ver mi pregunta [aquí] (http://stackoverflow.com/questions/8103639/android-orientation-change-causes-imageview-to-dissapear). –

Respuesta

0

¿Podría ser solo que su diseño no funciona en el modo paisaje/retrato? Intenta iniciar tu aplicación después de rotar, verifica si eso da los mismos resultados. Si es así: arregle su diseño: D

+0

La aplicación funciona en ambas orientaciones. No vuelve a mostrarse cuando la orientación cambia en cualquier dirección. – Tori

+0

Pestañas ... ¿estás usando una tabactividad con pestañas que son actividades por sí mismas? ¿Has añadido código a tu tabactivity también? Agregaría algunos registros para verificar qué funciones se llaman onconfigchanged y cuándo. – Nanne

+0

Sí, agregué el onconfig cambiado a la tabactividad, y con los registros puedo ver que onconfigchanged se llama tanto en la actividad de la pestaña como en la actividad que se muestra. El problema es que la vista no se muestra. – Tori

5

Tenía exactamente este problema. Después de mucho ensayo y error, finalmente lo resolví haciendo un cambio de una línea al manifiesto.

El truco es añadir

android:configChanges="orientation|keyboardHidden" 

a la entrada de sus TabActivity 's en el manifiesto. Deje todas las actividades del niño solo. Ni siquiera se moleste en implementar , ni siquiera en el TabActivity.

No sé cómo o por qué parece funcionar, pero el efecto es que el diseño se actualiza, y tanto las pestañas como el contenido de la actividad infantil se vuelven a dibujar correctamente en la nueva orientación.

+1

Gracias. Esto fue muy bueno. Funcionó para mí –

+0

Entonces no tomará xml de la carpeta layout-land si escribimos en maifest el código de línea anterior. – RobinHood

1

Con el éxito me encontrado que la mejor manera de tener pantalla cambia con la mayoría de control es hacer que su diseño xml de modo horizontal en un xml separada de este modo:

res/layout-land/youractivity.xml 

utilizando/diseño/y/esquema de trazado tierra/para sus diseños, así como la respuesta de Graham Borland es de oro.

<activity android:name=".MainActivity" 
        android:label="@string/app_name" 
        android:screenOrientation="unspecified" 
        android:launchMode="standard" 
        android:configChanges="orientation|keyboardHidden" 
        > 

el fragmento de arriba es lo que hizo que el mío funcione. :)

ohh Creo que el "no especificado" es lo que permite que el sistema para hacer lo que piensa que es mejor ...

Buena suerte!

+0

¿Hay alguna otra cosa para agregar? Agregué el archivo res/layout-land/main.xml pero no actualizó la vista cuando estaba en modo paisaje. La vista que se muestra sigue siendo el diseño para retrato. – exception01

+0

intente agregar: android: screenOrientation = "no especificado" Haga una toma de la propiedad extra y avíseme. –

1

En Mono para Android con un API objetivo mayor que 13 me encontré con que la línea que iría dentro del espacio de nombres, pero fuera del Activity class:

[Activity (Label = "Viewer", ConfigurationChanges = ConfigChanges.Orientation|ConfigChanges.ScreenSize)] 

conducen a la activación de OnConfigurationChanged() a pesar de cambiar el manifiesto tenía no.