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:

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?

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ó.

  • Parcelable y herencia
  • Pase la clase personalizada al fragmento
  • Android, cómo obtener el nombre del paquete?
  • ClassCastException al recuperar datos del paquete en Android
  • Android Library Package perdió el nombre de los parámetros de las interfaces internas
  • SavedInstanceState siempre es nulo en fragmento
  • Prueba de la unidad Android: Bundle / Parcelable
  • Beneficio de usar Parcelable en lugar de serializar objetos
  • Error al importar los paquetes
  • Ordenación de una parcela de notificación
  • ¿Qué herramientas existen que ofrecen protección apk para android (contra la inversión y el reenvasado)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.