9

बाइंडिंग एंड्रॉयड वास्तुकला अवयव के स्थिरीकरण मैं 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 है। क्या ये सही है?

उत्तर

6

एंड्रॉयड स्टूडियो 3.1 (वर्तमान में कैनरी 6 में) के बाद से LiveDataobservable field रूप में इस्तेमाल किया जा सकता है, इस मुद्दे को ठीक कर देंगे:

डाटा को अपडेट बाइंडिंग:

अब आप एक LiveData उपयोग कर सकते हैं डेटा बाइंडिंग अभिव्यक्तियों में एक अवलोकन योग्य फ़ील्ड के रूप में ऑब्जेक्ट करें। व्यूडाटा बाइंडिंग क्लास में अब एक नई सेट लाइफसाइक्ल विधि शामिल है जिसे आपको लाइवडेटा ऑब्जेक्ट्स देखने के लिए उपयोग करने के लिए उपयोग करने की आवश्यकता है।

स्रोत: Android Studio 3.1 Canary 6 is now available

संबंधित मुद्दे