Android Architecture Bileşenleri'nin kararlılığıyla, tüm ViewModel
s sürümlerini ViewModel
'un yeni uygulamasına güncellemeye başladım. Anlayışım gereği, Model
sınıfının kullanım ömrünü daha iyi kullanabilmesi için LiveData
kullanımı önerilir.Veri Bağlama ile LiveData'yı Kullanma
Data Binding
'u kullanmayı seviyorum çünkü Java/Kotlin tarafında kodu daha temiz hale getiriyor ve UI'yi güncellemek için değer değişikliklerini "izlemek" gerekmez. Ancak,kullanan sayfa düzeni, yalnızca Model
(veya ViewModel) BaseObservable
ve LiveData
uzantılarını genişletmiyorsa, verileri izler. LiveData
'un ana hedeflerinden birinin UI'ya programlı olarak uyulduğunu ve güncellendiğini biliyorum, ancak basit güncellemeler için Data Binding
çok kullanışlıdır.
Bu sorun zaten bildirilmiştir (GitHub ve Stack Overflow) ve ilk olarak sürüm 1.0'ın sahip olacağı söylenmişti ve şimdi bu özelliğin geliştirme aşamasında olduğu söyleniyor. Her iki LiveData
ve Data Binding
kullanmak için
, ben BaseObservable
uzanır sınıfın çok basit bir uygulama yarattı: Yani temelde
import android.arch.lifecycle.LiveData
import android.arch.lifecycle.MutableLiveData
import android.databinding.BaseObservable
class ObservableMutableLiveData<T>() : BaseObservable() {
private var data: MutableLiveData<T> = MutableLiveData()
constructor(data: T) : this() {
this.data.value = data
}
public fun set(value: T) {
if (value != data.value) {
data.value = value
notifyChange()
}
}
public fun get(): T? {
return data.value
}
public fun getObservable(): LiveData<T> {
return data
}
}
benim ObservableMutableLiveData
olan ObservableField
bir kopyası ve bununla modeli saklamak için LiveData
kullanarak Uygulama, her model güncellemesinden sonra düzen güncellemeleri.
sorular şunlardır:
- bu
LiveData
kötü uygulama mı? Bu sarıcı, yaşam döngüsü farkında olmak gibiLiveData
'un işlevlerini "kırar" mı? - Anlayışımda
LiveData
yeniObservableField
'dur. Bu doğru mu?LiveData
observable field
olarak kullanılabilir beri