2010-06-22 19 views
13

He creado una pantalla de búsqueda que tiene una pestaña para palabras clave, filtros y un botón de búsqueda, y tres pestañas opcionales para los diferentes tipos de resultados (cada uno contiene ListView con ArrayAdapter). Al iniciar la actividad, el desarrollador puede opcionalmente pasar los resultados como un Parcelable[] extra si la búsqueda ya se ha realizado. En el método onCreate() estoy creando cada una de las tres pestañas para pasar el Parcelable[].Android cambio de orientación llama a Crear

Cuando llamo a una búsqueda desde el botón en la pestaña del filtro, borro las pestañas y las vuelvo a crear con los nuevos resultados, que funcionan perfectamente. El problema es que cuando gira el dispositivo, parece que el soporte de conmutación de orientación automática de Android recrea toda la actividad, llamando al onCreate(). Esto significa que mis resultados de búsqueda se restablecen al Parcelable[] pasado al iniciar la actividad.

La única solución que he tenido hasta ahora es llamar al finish() luego startActivity() para esencialmente reiniciar la actividad con los nuevos resultados. Estoy seguro de que debe haber una solución mucho más simple y que he hecho algo extremadamente noobish.

¿Hay una mejor manera de hacerlo?

+1

Más de 4 años después, ¿editas mi pregunta para cambiar el formato? Quizás deberías hacer lo mismo con ListView, ArrayAdapter y Parcelable. También te perdiste onCreate() en el segundo párrafo. – Samah

+2

¿Por qué no, en lugar de quejarse de que Pratik Butani no formateó todo, mejorar el formato usted mismo? –

+0

Te perdiste una. : P – Samah

Respuesta

31

Of cource there is. Sólo tiene que añadir atribuyen a su configChanges AndroidManifest.xml, así:

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

Activity restart on rotation Android How do I disable orientation change on Android? http://developer.android.com/guide/topics/manifest/activity-element.html#config

+0

¡Gracias! Moví mi instancia de SearchResults a una aplicación singleton y todo está funcionando. :) – Samah

+0

para Android 3.2 (nivel de API 13) y más reciente: android: configChanges = "keyboardHidden | orientation | screenSize" – Vlad

13

Lo que usted describe es el comportamiento por defecto. Usted tiene que detectar y controlar estos eventos usted mismo añadiendo:

android:configChanges 

a su manifiesto y entonces los cambios que desea manejar. Así que para la orientación, se debería utilizar:

android:configChanges="orientation" 

y para el teclado que se abre o se cierra se debería utilizar:

android:configChanges="keyboardHidden" 

Si desea manejar tanto que sólo les puede separar con el comando pipa como :

android:configChanges="keyboardHidden|orientation" 

Esto hará que el método onConfigurationChanged en cualquier Activity llame. Si anula el método, puede pasar los nuevos valores.

Espero que esto ayude.

Cuestiones relacionadas