He encontrado una funcionalidad muy inesperada (e increíblemente frustrante) al intentar restaurar el estado de una lista de CheckBox
es después de una rotación de pantalla. Pensé que primero trataría de dar una explicación textual sin el código, en caso de que alguien sea capaz de determinar una solución sin todos los detalles sangrientos. Si alguien necesita más detalles, puedo publicar el código.Android CheckBox - Restaurando el estado después de la rotación de la pantalla
Tengo una lista desplegable de View
s compleja que contiene CheckBox
es. No he podido restablecer el estado de estas casillas de verificación después de una rotación de pantalla. He implementado onSaveInstanceState
y he transferido con éxito la lista de casillas de verificación seleccionadas al método onCreate
. Esto se maneja pasando un long[]
de identificadores de base de datos al Bundle
.
En onCreate()
compruebo el Bundle
para la matriz de ids. Si la matriz está allí, la utilizo para determinar qué casillas de verificación verificar cuando se está construyendo la lista. He creado varios métodos de prueba y he confirmado que las casillas de verificación se están configurando correctamente, en función de la matriz de id. Como última comprobación, estoy verificando los estados de todas las casillas de verificación al final de onCreate(
). Todo se ve bien ... a menos que gire la pantalla.
Cuando giro la pantalla, ocurre una de dos cosas: 1) Si se selecciona cualquier número de casillas de verificación, excepto la última, todas las casillas de verificación están desactivadas después de una rotación. 2) Si se marca la última casilla de verificación antes de la rotación, todas las casillas de verificación son marcadas después de la rotación.
Como dije, verifico el estado de las cajas al final de mi onCreate()
. El caso es que el estado de los cuadros al final de onCreate
es correcto según lo que seleccioné antes de la rotación. Sin embargo, el estado de los cuadros en la pantalla no refleja esto.
Además, me han puesto en práctica setOnCheckChangedListener()
y me han confirmado que el estado de mis casillas de verificación están siendo alterados después mis onCreate
devuelve el método de cada casilla de verificación.
¿Alguien tiene una idea de lo que está pasando? ¿Por qué cambiaría el estado de mis casillas de verificación después de que mi método onCreate
regrese?
Gracias de antemano por su ayuda. He estado intentando degubar esto por un par de días. Cuando descubrí que mis casillas de verificación aparentemente cambiaban en algún lugar fuera de mi propio código, pensé que era hora de preguntar.
Creo que se llama onResume después de onCreate cuando se realiza un cambio de orientación. ¿Está pasando algo en RePress? –