La orientación de Android cambia las llamadas en Crear

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 tabs opcionales para los diferentes tipos de resultados (cada uno contiene un ListView con un ArrayAdapter ). Al comenzar la actividad, el desarrollador puede opcionalmente pasar los resultados como Parcelable[] adicional si la búsqueda ya se ha realizado. En el método onCreate() , estoy creando cada una de las tres tabs para Parcelable[] .

Cuando llamo a una búsqueda desde el botón en la pestaña del filtro, borro las tabs 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 cambio de orientación automática de Android recrea toda la actividad y llama a onCreate() . Esto significa que mis resultados de búsqueda se restablecen a Parcelable[] pasados ​​al iniciar la actividad.

La única solución que he tenido hasta ahora es llamar a finish() luego a 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 hacer esto?

De cource hay. Solo agrega el atributo configChanges a tu AndroidManifest.xml, así:

  

Reinicio de actividad en rotación Android ¿Cómo desactivo el cambio de orientación en Android? http://developer.android.com/guide/topics/manifest/activity-element.html#config

Lo que describes es el comportamiento predeterminado. Debe detectar y manejar estos eventos usted mismo al agregar:

 android:configChanges 

a su manifiesto y luego a los cambios que desea manejar. Entonces, para la orientación, usarías:

 android:configChanges="orientation" 

y para abrir o cerrar el teclado, usaría:

 android:configChanges="keyboardHidden" 

Si quieres manejar ambos, puedes separarlos con el comando pipe como:

 android:configChanges="keyboardHidden|orientation" 

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

Espero que esto ayude.