2016-06-02 9 views
8

मैं अपने गतिविधि वर्ग है, जो इतनी तरह मेरे ToggleButton की "जाँच" विशेषता के लिए बाध्य है में एक ObservableBoolean क्षेत्र है:ToggleButton के साथ दो-तरफा डेटा बाध्यकारी कैसे करें?

android:checked="@{activity.editing}" 

मुझे उम्मीद थी इस बटन और जो दो तरह से संबंध बनाने हैं बुलियन, लेकिन यह केवल क्षेत्र से बटन में परिवर्तन करता है, दूसरी तरफ नहीं। मैं गलत क्या कर रहा हूं, या यह एंड्रॉइड DataBinding के दायरे में नहीं है?

उत्तर

18

आप की जरूरत है एक और '=' एंड्रॉयड बताने के लिए है कि आप दो तरीके से डेटा बाइंडिंग का उपयोग करना चाहते:

दो:

android:checked="@={activity.editing}" 

आप इस in the wordpress article of George Mount बारे में अधिक जानकारी प्राप्त कर सकते हैं -वे डेटा बाध्यकारी

एंड्रॉइड सामान्य डेटा ent प्रतिरक्षा नहीं है आरई और उपयोगकर्ता के इनपुट से मॉडल में बदलाव को प्रतिबिंबित करना अक्सर महत्वपूर्ण होता है। उदाहरण के लिए, यदि उपर्युक्त डेटा किसी संपर्क फ़ॉर्म में था, तो संपादन टेक्स्ट को डेटा को खींचने के बिना संपादित टेक्स्ट को मॉडल में वापस धक्का देना अच्छा लगेगा। यहाँ है कि आप इसे कैसे करना है:

<layout ...> 
    <data> 
     <variable type="com.example.myapp.User" name="user"/> 
    </data> 
    <RelativeLayout ...> 
     <EditText android:text="@={user.firstName}" .../> 
    </RelativeLayout> 
</layout> 

सुंदर गंधा, हाँ? यहां केवल अंतर यह है कि अभिव्यक्ति को @{} के बजाय @={} के साथ चिह्नित किया गया है। यह अपेक्षा की जाती है कि अधिकांश डेटा बाध्यकारी एक-तरफा रहेगा और हम उन सभी श्रोताओं को नहीं बनाना चाहते हैं जो बदलावों के लिए देख रहे हैं और कभी नहीं होंगे।

3

ObservableBoolean लेने की कोई आवश्यकता नहीं है, तो आप इस ऑपरेशन को बूलियन चर के नियमित गेटर-सेटर विधि द्वारा निष्पादित कर सकते हैं। इस तरह आपकी मॉडल कक्षा

public class User{ 
    private boolean checked; 

    public boolean isChecked() { 
     return checked; 
    } 

    public void setChecked(boolean checked) { 
     this.checked = checked; 
    } 
} 

आपके ToggleButton पर दो-तरफा बाध्यकारी प्रदर्शन करें।

<ToggleButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:checked="@={user.checked}"/> 

और बाध्यकारी चर का उपयोग करके इस मान को प्राप्त करें।

binding.getUser().isChecked() 
+1

आप अपने सेटर में '@ बाइंडेबल' एनोटेशन 'चेक' (''' और 'अधिसूचनाप्रॉपर्टी चेंज (बीआर.चेक्ड)' को अपने सेटर में याद कर रहे हैं। – saiyancoder

+1

@ सियानकोडर मुझे इसकी आवश्यकता नहीं है –

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