Cómo guardar y restaurar el estado de la vista android
Soy consciente del estado de actividad de ahorro y restauración. Pero lo que quiero hacer es guardar y restaurar el estado de una vista. Tengo una vista personalizada y dos métodos anulados en él:
@Override protected void onRestoreInstanceState(Parcelable state) { if (state instanceof Bundle) { Bundle bundle = (Bundle) state; currentLeftX = bundle.getInt(CURRENT_LEFT_X_PARAM, 0); currentTopY = bundle.getInt(CURRENT_TOP_Y_PARAM, 0); } super.onRestoreInstanceState(state); } @Override protected Parcelable onSaveInstanceState() { super.onSaveInstanceState(); Bundle bundle = new Bundle(); bundle.putInt(CURRENT_LEFT_X_PARAM, currentLeftX); bundle.putInt(CURRENT_TOP_Y_PARAM, currentTopY); return bundle; }
Esperaba que esto funcionara sin problemas, pero encontró y error:
- Pasando las matrices usando bundle en android
- ¿Un objeto serializable siempre se serializa cuando se pone en un paquete?
- ¿Cómo sé qué datos se proporcionan en un paquete?
- Al pasar argumentos Android DialogFragment, onCreateDialog agument paquete es inesperadamente nulo
- Imprimir el contenido de un paquete a Logcat?
Causado por: java.lang.IllegalArgumentException: Clase de estado incorrecta, esperando State View pero recibiendo la clase android.os.Bundle en su lugar. Esto suele suceder cuando dos vistas de diferente tipo tienen el mismo id en la misma jerarquía. El ID de esta vista es id / mapViewId. Asegúrese de que otras vistas no utilicen el mismo id. En android.view.View.onRestoreInstanceState (View.java:6161)
Pero esta visión es la única en mi actividad. Por lo tanto, estoy preguntando:
¿Cuál es la manera correcta de guardar el estado de la vista?
- ¿Cuál es el nombre del paquete de la aplicación de Google Play y de la aplicación de AndroidPIT?
- Android: Fuerza los datos que se envían a través de radio vs WiFi
- android preferencias compartidas y paquete comparado con preferencias compartidas
- Listado del paquete de reloj / alarma del fabricante y nombre de la clase, por favor agregue
- Error al ejecutar zipalign
- Android VpnService para capturar paquetes no captura paquetes
- Obtener icono de otra aplicación de Android
- ¿Cómo se pasan las imágenes (mapas de bits) entre las actividades de androide mediante bundles?
Echa un vistazo a esta respuesta:
Cómo evitar que las vistas personalizadas pierdan estado a través de los cambios de orientación de la pantalla
super.OnSaveInstanceState()
caer el resultado de super.OnSaveInstanceState()
y devuelve tu propio. Entonces más adelante en OnRestoreInstanceState(Parcelable)
usted devuelve el que usted creó.
La solución para eso está aquí:
Cómo evitar que las vistas personalizadas pierdan estado a través de los cambios en la orientación de la pantalla # 2
Puedo estar equivocado, pero creo que necesitas guardar el paquete que el padre devuelve:
@Override protected Parcelable onSaveInstanceState() { Parcelable bundle = super.onSaveInstanceState(); bundle.putInt(CURRENT_LEFT_X_PARAM, currentLeftX); bundle.putInt(CURRENT_TOP_Y_PARAM, currentTopY); return bundle; }
De lo contrario, estás perdiendo todo lo que la superclase guardó.