2012-06-07 13 views

Respuesta

10

Destacando @kirgy comment, Tienes que agregar orientation|screenSize a tu manifiesto si tu API> 3.2, en algunos casos no funcionará sin él.

+3

No, no, no. Por favor permita que su configuración se actualice cuando debería. –

+0

@NightlyNexus ¿cuáles pueden ser las implicaciones de hacer esto dentro de una vista web? –

+0

@cgomezmendez Permita siempre que sus Vistas restablezcan su estado. Sí, en este caso, un WebView no tiene estado para guardar y restaurar, pero ¿es WebView la única parte del estado de la instancia de su actividad? Casi seguro que no. –

47

Hay más de un enfoque para abordar este problema.

La salida más fácil es agregar android:configChanges="orientation|screenSize" al correspondiente Activity en su manifiesto. Al establecer este indicador, le indica a Android que no destruya el Activity y que usted se encargará de todos los cambios de orientación (si corresponde).

El enfoque más moderno sería poner el WebView dentro de un Fragment y hacer que conserve su instancia, usando el indicador setRetainInstance(true). El alojamiento Activity seguirá destruido en los cambios de orientación, pero el Fragment que contiene el WebView simplemente se desconectará y se volverá a conectar, sin la necesidad de volver a crearse. Puede encontrar an example de esta función en las demostraciones de la API. Tenga en cuenta que la biblioteca de soporte ofrece una implementación de fragmentos compatible con Honeycomb, por lo que no se deje engañar por el nivel API de la clase 'normal' Fragment.

+2

Su primera forma "más fácil" de hacer esto es la única manera. El "enfoque más moderno" no funcionará en este caso (bueno, funcionará, pero perderá memoria) porque un WebView está vinculado al contexto de una actividad al crear instancias. Consulte [los comentarios de Dianne Hackborn sobre eso] (https://groups.google.com/forum/#!msg/android-developers/cWnxkQ8RLeY/RA1n77EDeR8J). – mkuech

+0

@mkuech: este último es el caso para cualquier vista, no solo 'WebView's - es por eso que siempre encontrarás que vuelves a inflar las vistas en un nivel de fragmento en' onCreateView() 'o' onActivityCreated() '. No entré en detalles en mi respuesta anterior, pero con 'setRetainInstance (true)' podría hacer que el 'viejo' WebView' guarde su estado en un paquete y lo restaure después. Significa que 'WebView' tendrá que reconstruir su contenido (leer: volver a cargar la url), por lo que visualmente no es tan rápido/sencillo como el manejo manual de la configuración de' Activity'. –

+2

Pero no es necesario que use un 'Fragmento' para guardar el estado de' WebView'. Solo puede usar los métodos estándar de administración del estado de 'Activity' o' Fragment' si eso es todo lo que necesita. 'setRetainInstance (true)' no es _normally_necesario para este simple caso de uso. Más simplemente reemplaza 'onRetainNonConfigurationInstance', y es útil para cosas como mantener un' Thread' activo a través de los cambios de configuración. Evitaría complicar las cosas. Además, como el simple hecho de guardar el estado de 'WebView' no evitará que se vuelva a dibujar/recargar, la primera solución es la única manera real de mantenerlo sin interrupciones durante la rotación. – mkuech

5

Agregue android:configChanges="orientation" a su archivo de manifiesto para evitar que se reinicie cuando cambie la orientación de la pantalla.

como ::

<activity android:name=".MyActivity"  
    android:configChanges="orientation" 
    android:label="@string/app_name"> 

Ver this para algunas referencias.

+0

Querido Abhina8, muchas gracias ..es realmente grandote ... Probé que funciona muy bien para mí :). – SopheakVirak

+0

@SopheakVirak encantados de ayudarte. – Eight

+6

Una nota para Android 3.2+ (API 13): a partir de esta versión, una rotación de pantalla también provoca un cambio en el tamaño de la pantalla que refrescará la interfaz de usuario. Debe declarar "orientation | screenSize" en lugar de solo "orientation". Esto es todo en el artículo anterior de Android sugerido por @MH. http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange – kirgy

Cuestiones relacionadas