Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Módulo de estado guardado para ViewModel Parte de Android Jetpack.

Como se mencionó en el artículo Cómo guardar estados de IU, los objetos ViewModel pueden controlar los cambios de configuración para que no tengas que preocuparte por el estado durante las rotaciones y otros casos. Sin embargo, si necesitas administrar el cierre de un proceso iniciado por el sistema, puedes usar onSaveInstanceState() para copias de seguridad.

Por lo general, se almacena el estado de la IU (o se hace referencia a él) en objetos ViewModel, no en actividades; por lo tanto, el uso de onSaveInstanceState() requiere algo de código estándar que este módulo puede ayudarte a administrar.

Cuando el módulo está configurado, los objetos ViewModel reciben un objeto SavedStateHandle a través de su constructor. Este es un mapa de clave-valor que te permitirá escribir y recuperar objetos hacia el estado guardado y desde este. Estos valores persistirán una vez que el sistema anule el proceso y permanecerán disponibles en el mismo objeto.

Configuración y uso

Cuando usas Fragment 1.2.0 o su dependencia transitiva Activity 1.1.0, el valor predeterminado de fábrica para las instancias de ViewModel admite el SavedStateHandle apropiado para tu ViewModel, sin ninguna configuración adicional.

Kotlin

    // Use the Kotlin property extension in the fragment-ktx / activity-ktx artifacts
    val vm: SavedStateViewModel by viewModels()

    

Java

    SavedStateViewModel vm = new ViewModelProvider(this)
            .get(SavedStateViewModel.class);
    

Luego, tu ViewModel puede tener un constructor que reciba un SavedStateHandle:

Kotlin

    class SavedStateViewModel(private val state: SavedStateHandle) : ViewModel() { ... }
    

Java


    public class SavedStateViewModel extends ViewModel {
        private SavedStateHandle mState;

        public SavedStateViewModel(SavedStateHandle savedStateHandle) {
            mState = savedStateHandle;
        }
        ...
    }
    

Cuando proporcionas una instancia ViewModelProvider.Factory personalizada, puedes habilitar el uso de SavedStateHandle extendiendo AbstractSavedStateViewModelFactory.

Cómo almacenar y recuperar valores

La clase SavedStateHandle tiene los métodos que esperas para un mapa de clave-valor:

  • get(String key)
  • contains(String key)
  • remove(String key)
  • set(String key, T value)
  • keys()

Además, hay un método especial, getLiveData(String key), que muestra el valor unido en un objeto LiveData observable.

Clases aceptables

Tipo/clase Compatibilidad con arreglos
double double[]
int int[]
long long[]
String String[]
byte byte[]
char char[]
CharSequence CharSequence[]
float float[]
Parcelable Parcelable[]
Serializable Serializable[]
short short[]
SparseArray
Binder
Bundle
ArrayList
Size (only in API 21+)
SizeF (only in API 21+)

Recursos adicionales

A fin de obtener más información sobre el módulo de estado guardado para ViewModel, consulta los siguientes recursos.

Codelabs