In ViewModel belgelerinde
Ancak ViewModel nesneleri, LiveData nesneleri gibi yaşam döngüsüne duyarlı gözlemlenebilir öğelerdeki değişiklikleri asla gözlemlememelidir.
Başka bir yol, verilerin LiveData yerine RxJava'yı uygulamasıdır, o zaman yaşam döngüsüne duyarlı olma avantajına sahip olmayacaktır.
Todo-mvvm-live-kotlin'in google örneğinde, ViewModel'de LiveData olmadan bir geri arama kullanır.
Yaşam döngüsü yazılımı olma fikrinin tamamına uymak istiyorsanız, gözlem kodunu Activity / Fragment'a taşımamız gerektiğini tahmin ediyorum. Aksi takdirde, ViewModel'de geri arama veya RxJava kullanabiliriz.
Diğer bir uzlaşma ise MediatorLiveData'yı (veya Dönüşümleri) uygulamak ve ViewModel'de gözlemlemek (mantığınızı buraya koyun). Dikkat, MediatorLiveData gözlemcisi, Activity / Fragment'te gözlenmediği sürece tetiklenmez (Dönüşümler ile aynı). Gerçek işin aslında ViewModel'de yapıldığı Activity / Fragment'e boş bir gözlem koyuyoruz.
fun start(id : Long) : LiveData<User>? {
val liveData = MediatorLiveData<User>()
liveData.addSource(dataSource.getById(id), Observer {
if (it != null) {
}
})
}
viewModel.start(id)?.observe(this, Observer {
})
Not: ViewModels ve LiveData: Patterns + AntiPatterns okudum ki bu Transformations önerdi. LiveData gözlemlenmedikçe çalıştığını sanmıyorum (muhtemelen Activity / Fragment'de yapılmasını gerektirir).