samsung - Guardar y restaurar el estado de vista de Android
restaurar copia de seguridad android (3)
Esta pregunta ya tiene una respuesta aquí:
Estoy al tanto del estado de actividad de salvar y restaurar. Pero lo que quiero hacer es guardar y restaurar el estado de una vista. Tengo una vista personalizada y dos métodos anulados en ella:
@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 se encontró y error:
Causado por: java.lang.IllegalArgumentException: Clase de estado incorrecta, que esperaba View State pero que recibió la clase android.os.Bundle en su lugar. Esto generalmente ocurre cuando dos vistas de diferentes tipos tienen la misma identificación en la misma jerarquía. La identificación de esta vista es id / mapViewId. Asegúrese de que otras vistas no usen la misma identificación. en android.view.View.onRestoreInstanceState (View.java:6161)
Pero esta vista es la única en mi actividad. Entonces, estoy preguntando:
¿Cuál es la forma correcta de guardar el estado de la vista?
Podría estar equivocado, pero creo que debes 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 ha salvado la superclase.
super.OnSaveInstanceState()
el resultado de super.OnSaveInstanceState()
y devuelve el suyo. Luego, más adelante en OnRestoreInstanceState(Parcelable)
, devuelve el que creó.
La solución para eso está aquí: