9

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 gibi LiveData'un işlevlerini "kırar" mı?
  • Anlayışımda LiveData yeni ObservableField'dur. Bu doğru mu? LiveDataobservable field olarak kullanılabilir beri

cevap

6

(şu anda Kanarya 6'da) Android Studio 3.1 Bu sorunu çözecektir:

Verilere

Güncellemeler Bağlama:

Artık bir LiveData kullanabilirsiniz veri bağlama ifadelerinde gözlemlenebilir bir alan olarak nesne. ViewDataBinding sınıfı, artık LiveData nesnelerini gözlemlemek için kullanmanız gereken yeni bir setLifecycle yöntemi içerir.

Kaynak: Android Studio 3.1 Canary 6 is now available

İlgili konular