दो तरफ़ा डेटा बाइंडिंग

एकतरफ़ा डेटा बाइंडिंग का इस्तेमाल करके, किसी एट्रिब्यूट पर वैल्यू सेट की जा सकती है. इसके बाद, लिसनर जो एट्रिब्यूट में होने वाले बदलाव पर प्रतिक्रिया देते हैं:

<CheckBox
    android:id="@+id/rememberMeCheckBox"
    android:checked="@{viewmodel.rememberMe}"
    android:onCheckedChanged="@{viewmodel.rememberMeChanged}"
/>

दो-तरफ़ा डेटा बाइंडिंग, इस प्रोसेस का शॉर्टकट देता है:

<CheckBox
    android:id="@+id/rememberMeCheckBox"
    android:checked="@={viewmodel.rememberMe}"
/>

@={} नोटेशन, जिसमें महत्वपूर्ण रूप से "=" शामिल होता है साइन, डेटा रिसीव करता है प्रॉपर्टी में किए गए बदलावों को देखना और उपयोगकर्ता के अपडेट को एक साथ सुनना भी शामिल है.

बैकिंग डेटा में हुए बदलावों पर प्रतिक्रिया देने के लिए, अपना लेआउट Observable का लागू करने वाला वैरिएबल, आम तौर पर BaseObservable और किसी @Bindable व्याख्या, जैसा कि इसमें दिखाया गया है यहां दिया गया कोड स्निपेट जोड़ें:

Kotlin

class LoginViewModel : BaseObservable {
    // val data = ...

    @Bindable
    fun getRememberMe(): Boolean {
        return data.rememberMe
    }

    fun setRememberMe(value: Boolean) {
        // Avoids infinite loops.
        if (data.rememberMe != value) {
            data.rememberMe = value

            // React to the change.
            saveData()

            // Notify observers of a new value.
            notifyPropertyChanged(BR.remember_me)
        }
    }
}

Java

public class LoginViewModel extends BaseObservable {
    // private Model data = ...

    @Bindable
    public Boolean getRememberMe() {
        return data.rememberMe;
    }

    public void setRememberMe(Boolean value) {
        // Avoids infinite loops.
        if (data.rememberMe != value) {
            data.rememberMe = value;

            // React to the change.
            saveData();

            // Notify observers of a new value.
            notifyPropertyChanged(BR.remember_me);
        }
    }
}

बाइंड होने लायक प्रॉपर्टी के गैटर तरीके को getRememberMe() कहा जाता है. इसलिए, प्रॉपर्टी से जुड़ा सेटर तरीका अपने-आप नाम का इस्तेमाल करता है setRememberMe().

BaseObservable और @Bindable का इस्तेमाल करने के बारे में ज़्यादा जानकारी के लिए, इनके साथ काम करें मॉनिटर किए जा सकने वाले डेटा ऑब्जेक्ट.

कस्टम एट्रिब्यूट इस्तेमाल करके दो-तरफ़ा डेटा बाइंडिंग

यह प्लैटफ़ॉर्म सबसे आम दो-तरफ़ा एट्रिब्यूट और लिसनर बदलें, ताकि इनका इस्तेमाल किया जा सके में जोड़ा जा सकता है. अगर आपको कस्टम पैरामीटर के साथ दो-तरफ़ा डेटा बाइंडिंग का इस्तेमाल करना है, तो विशेषताओं के साथ काम करना है, तो आपको @InverseBindingAdapter और @InverseBindingMethod एनोटेशन.

उदाहरण के लिए, अगर आपको "time" एट्रिब्यूट पर दो-तरफ़ा डेटा बाइंडिंग चालू करनी है MyView नाम के कस्टम व्यू में, नीचे दिए गए चरणों को पूरा करें:

  1. उस तरीके के बारे में बताएं जो शुरुआती वैल्यू सेट करता है और वैल्यू के अपडेट होने पर @BindingAdapter का इस्तेमाल करके किए गए बदलाव:

    Kotlin

    @BindingAdapter("time")
    @JvmStatic fun setTime(view: MyView, newValue: Time) {
        // Important to break potential infinite loops.
        if (view.time != newValue) {
            view.time = newValue
        }
    }

    Java

    @BindingAdapter("time")
    public static void setTime(MyView view, Time newValue) {
        // Important to break potential infinite loops.
        if (view.time != newValue) {
            view.time = newValue;
        }
    }
  2. का उपयोग करके दृश्य से मान पढ़ने वाली विधि एनोटेट करें @InverseBindingAdapter:

    Kotlin

    @InverseBindingAdapter("time")
    @JvmStatic fun getTime(view: MyView) : Time {
        return