बाइंडिंग एंड्रॉयड वास्तुकला अवयव के स्थिरीकरण मैं ViewModel
के नए कार्यान्वयन करने के लिए अपने सभी बुनियादी ViewModel
रों को अद्यतन करने के लिए शुरू कर दिया साथ साथ LiveData का उपयोग करना। मेरी समझ में, LiveData
के उपयोग Model
वर्ग धारण करने के लिए है, क्योंकि यह जीवन चक्र बेहतर संभालती सिफारिश की है।डाटा
मुझे Data Binding
का उपयोग करना पसंद है क्योंकि यह जावा/कोटलिन पक्ष में कोड साफ़ करता है और UI को अपडेट करने के लिए मान परिवर्तनों को "देखने" की आवश्यकता नहीं है। हालांकि Data Binding
का उपयोग कर यदि Model
(या ViewModel) फैली हुई है BaseObservable
और LiveData
केवल डाटा परिवर्तन देखने के लेआउट नहीं करता है। मैं समझता हूँ LiveData
के मुख्य उद्देश्यों में से एक मनाया जा रहा है और प्रोग्राम के रूप में यूआई अद्यतन करता है, लेकिन सरल अद्यतन के लिए, Data Binding
बहुत उपयोगी है।
यह समस्या पहले ही रिपोर्ट की गई थी (GitHub और Stack Overflow) और पहले कहा गया था कि संस्करण 1.0 में यह होगा और अब कहा जाता है कि यह सुविधा विकास में है।
आदेश दोनों LiveData
और Data Binding
का उपयोग करने के लिए, मैं कक्षा कि BaseObservable
फैली की एक बहुत ही सरल कार्यान्वयन बनाया:
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
}
}
तो मूल रूप से मेरी ObservableMutableLiveData
है ObservableField
की एक प्रति मॉडल स्टोर करने के लिए और इस के साथ LiveData
का उपयोग कर कार्यान्वयन, प्रत्येक मॉडल अद्यतन के बाद लेआउट अद्यतन।
प्रश्न हैं:
- इस
LiveData
का एक बुरा कार्यान्वयन है? इस आवरण "टूट जाता है" इस तरह के जीवन चक्र-बारे में पता होना के रूप मेंLiveData
की कार्यक्षमताओं, करता है? - मेरी समझ में,
LiveData
नईObservableField
है। क्या ये सही है?