Modul Status Tersimpan untuk ViewModel   Bagian dari Android Jetpack.

Seperti disebutkan dalam artikel Menyimpan Status UI , objek ViewModel dapat menangani perubahan konfigurasi agar Anda tidak perlu khawatir tentang status dalam rotasi atau kasus lainnya. Akan tetapi, jika perlu menangani kematian proses yang diprakarsai oleh sistem , Anda dapat menggunakan onSaveInstanceState() sebagai cadangan.

Status UI biasanya disimpan atau direferensikan dalam objek ViewModel , bukan aktivitas; jadi penggunaan onSaveInstanceState() memerlukan beberapa boilerplate yang dapat ditangani oleh modul ini untuk Anda.

Saat modul disiapkan, objek ViewModel menerima objek SavedStateHandle melalui konstruktornya. Ini adalah peta nilai kunci yang memungkinkan Anda menulis dan mengambil objek ke dan dari status yang tersimpan. Nilai-nilai ini akan bertahan setelah proses dimatikan oleh sistem dan tetap tersedia melalui objek yang sama.

Penyiapan dan penggunaan

Untuk mengimpor modul Status Tersimpan ke dalam project Android, lihat petunjuk untuk mendeklarasikan dependensi pada catatan rilis Lifecycle.

Untuk menyiapkan ViewModel agar dapat menerima SavedStateHandle, Anda harus membuatnya menggunakan Factory yang menjangkau AbstractSavedStateVMFactory.

Kotlin

    val vm = ViewModelProvider(this, SavedStateVMFactory(this))
            .get(SavedStateViewModel::class.java)

    

Java

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

Setelah itu, ViewModel dapat memiliki konstruktor yang menerima SavedStateHandle:

Kotlin

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

Java


    public class SavedStateViewModel extends ViewModel {
        private SavedStateHandle mState;

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

Menyimpan dan mengambil nilai

Kelas SavedStateHandle memiliki metode yang Anda harapkan untuk peta nilai kunci:

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

Selain itu, ada metode khusus: getLiveData(String key) yang menampilkan nilai yang tergabung dalam observable LiveData.

Kelas yang dapat diterima

Jenis/Kelas Dukungan array
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+)

Referensi lainnya

Untuk informasi lebih lanjut tentang modul Status Tersimpan untuk ViewModel, lihat referensi berikut.

Codelab