दृश्यता सेट करने के लिए डेटा बाइंडिंग का उपयोग करें


102

Viewकस्टम चर का उपयोग करके दृश्यता सेट करने की कोशिश की जा रही है , लेकिन त्रुटि होती है Identifiers must have user defined types from the XML file. visible is missing it:। क्या डेटा बाइंडिंग का उपयोग करके दृश्यता सेट करना संभव है? धन्यवाद।

<data>
    <variable
        name="sale"
        type="java.lang.Boolean"/>
</data>

<FrameLayout android:visibility="@{sale ? visible : gone}"/>

जवाबों:


232

जैसा कि एंड्रॉइड डेवलपर गाइड में कहा गया है , आपको इसे इस तरह से करने की आवश्यकता है:

<data>
    <import type="android.view.View"/>
    <variable
        name="sale"
        type="java.lang.Boolean"/>
</data>

<FrameLayout android:visibility="@{sale ? View.GONE : View.VISIBLE}"/>

6
और "बिक्री" के लिए मूल्य कैसे सेट करें?
रॉबिनहुड

तो आपका मतलब है कि स्ट्रिंग के चर के लिए मूल्य "बिक्री" कैसे निर्दिष्ट किया जाए?
डेविड आर्टमैन

बिल्कुल सही! मैं समस्या का सामना कर रहा हूं। कृपया साझा करें मैं तुलना करूंगा और फिर आपको बता दूंगा।
रोबिनहुड

40
लानत है! मैं सिली आयात कैसे याद किया । धन्यवाद कर दिया।
रॉबिनहुड

अरे! किसी भी विचार क्यों स्क्रॉल पर स्थिति गड़बड़? एडाप्टर
रोबिनहुड

58

आपके लेआउट में:

<data>
    <variable
        name="viewModel"
        type="...."/>
</data>


<View
 android:layout_width="10dp"
 android:layout_height="10dp"
 android:visibility="@{viewModel.saleVisibility, default=gone}"/>

आपके ViewModel जावा कोड में:

@Bindable
public int getSaleVisibility(){
 return mSaleIndecator ? VISIBLE : GONE;
}

3
आपने मुझे मामूली सिरदर्द से बचाया
कोएन वान लोवरेन

2
आपके डेटा मॉडल को कार्य करने के लिए अवलोकन योग्य होना चाहिए।
यशख

इसमें शामिल हुए बिना मेरे लिए काम किया @Bindable। जब मैंने शामिल किया कि मुझे अलग-अलग बाध्यकारी त्रुटियाँ मिल रही थीं, जिसमें विस्तार करने का सुझाव भी शामिल था BaseObservable। यहाँ अच्छा सूचक
जीन बो

2
स्वीकृत उत्तर होना चाहिए! यह मेरे लिए पूरी तरह से काम किया है!
क्रिस

के लिए कोई सुझाव LiveData<Boolean>?
सौरव बागची

41

समस्या यह है कि है visibilityहै एक Integerपर Viewवर्ग, इस का मतलब है कि आप इस काम करने के लिए दो तरीके हैं:

  1. View.VISIBLEऔर View.GONEस्थिरांक का उपयोग करें । https://developer.android.com/topic/libraries/data-binding/index.html#imports
  2. एक कस्टम सेटर को परिभाषित करने के लिए visibilityहै कि एक लेता है Booleanhttps://developer.android.com/topic/libraries/data-binding/index.html#custom_setters

संभावित कार्यान्वयन:

@BindingAdapter("android:visibility")
public static void setVisibility(View view, Boolean value) {
    view.setVisibility(value ? View.VISIBLE : View.GONE);
}

जिससे <FrameLayout android:visibility="@{sale}"/>काम बनेगा ।


4
जहां यह आपके लिए सुविधाजनक है, एनोटेशन प्रोसेसर संकलन के दौरान स्वचालित रूप से उनका पता लगाता है।
किसका डे

धन्यवाद, मैं इसे अपने
बंधन

लेकिन मूल्य बिक्री कैसे सेट करें?
EslamWael74

1
मैं टैग्स को शामिल करने के लिए एक ही दृष्टिकोण कैसे लागू कर सकता हूं?
ज़ेफ़र सेलोग्लू

1
@ EslamWael74 आपने अपने जावा / कोटलिन कोड में बाइंडिंग के माध्यम से बिक्री का मूल्य निर्धारित किया है। वैल बाइंडिंग जैसा कुछ = MyClassBinding.inflate (...), और फिर आप बस बाइंडिंग को सही कर सकते हैं। सच =।
मैट रॉबर्टसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.