Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Modul Status Tersimpan untuk ViewModel   Bagian dari Android Jetpack.

Seperti disebutkan dalam artikel Menyimpan Status UI, objek ViewModel dapat menangani perubahan konfigurasi sehingga Anda tidak perlu khawatir tentang status dalam rotasi atau kasus lainnya. Namun, jika Anda perlu menangani penghentian proses yang diinisialisasi sistem, Anda dapat menggunakan onSaveInstanceState() sebagai cadangan.

Status UI biasanya disimpan atau dirujuk 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 dipertahankan setelah proses dihentikan oleh sistem dan akan tetap tersedia melalui objek yang sama.

Penyiapan dan penggunaan

Saat menggunakan Fragmen 1.2.0 atau dependensi transitif Aktivitas 1.1.0-nya, setelan pabrik default untuk instance ViewModel mendukung penerusan SavedStateHandle yang sesuai untuk ViewModel Anda tanpa konfigurasi tambahan.

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);
    

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;
        }
        ...
    }
    

Saat memberikan instance ViewModelProvider.Factory kustom, Anda dapat mengaktifkan penggunaan SavedStateHandle dengan memperluas AbstractSavedStateViewModelFactory.

Menyimpan dan mengambil nilai

Class 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 digabungkan dalam LiveData yang dapat diobservasi.

Class 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