2016-11-28 11 views
15

यह प्रश्न का सबसे बुनियादी होना है, लेकिन ट्यूटोरियल पढ़ने और दस्तावेज here के पूरे दिन के बाद मुझे यह समझ में नहीं आ रहा है कि इन तरीकों को कहां रखा जाए। गाइड में से कोई भी उल्लेख नहीं करता कि यह चीज़ कहां रखी गई है, यह केवल स्थिर विधि पर एनोटेशन का उपयोग करने का उल्लेख करती है। क्या स्थिर विधि? कक्षा के बावजूद किसी भी स्थिर विधि? एक अच्छा अभ्यास क्या है? क्या मैं इन सभी स्थिर तरीकों को होस्ट करने के लिए कस्टम बाइंडिंग क्लास बना सकता हूं?एंड्रॉइड बाइंडिंग एडाप्टर विधि कहां रखें?

जब तक मेरे पास विधि में बाध्यकारी एडाप्टर एनोटेशन है और पहला पैरामीटर एक दृश्य है, तो यह काम करेगा?

मुझे लगता है कि पहला पैरामीटर प्रकार का है या नहीं, मैं किसी भी प्रकार के विचारों पर बाध्यकारी विशेषता रख सकता हूं और यह विधि को ट्रिगर करेगा? इसलिए यदि मेरे पास विशिष्ट दृश्य है, तो EditText कहता है, क्या इसका मतलब यह है कि विधि केवल तभी कॉल की जाती है जब विशेषता लेआउट फ़ाइल में एडिटटेक्स्ट व्यू में पाई जाती है?

+1

देखें कि यह पहले से मौजूद मौजूदा एडाप्टर के साथ कैसे किया जाता है, जैसे [TextViewBindingAdapter] (https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/src/ मुख्य/जावा/एंड्रॉइड/डाटाबेसिंग/एडाप्टर/TextViewBindingAdapter.java) और [मूल फ़ोल्डर] (https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/ src/main/java/android/डेटाबेस/एडेप्टर) – pskink

उत्तर

11

इंटरनेट के माध्यम से नेविगेट करने के बाद मैं अंत में कुछ जानकारी डेवलपर्स में से एक से मिल गया है खुद को। काश वे प्रलेखन में मूल बातें पर अधिक स्पष्ट होता।

Quote:

बाध्यकारी एडेप्टर एनोटेट किसी भी वर्ग में तरीकों कि सिर्फ यह करने के लिए उपयोग किया जाता है। आम तौर पर, आप अपने एडाप्टर को लक्ष्य दृश्य प्रकार के आधार पर [-a] कक्षाओं में व्यवस्थित करेंगे।

इसका स्पष्ट अर्थ यह है कि संकलन समय पर एनोटेशन के साथ किसी भी वर्ग में सभी विधियों बाध्यकारी एडाप्टर बाध्यकारी एडाप्टर उत्पन्न करेगा।

1

आप इसे अपनी मॉडल कक्षा में रखते हैं।

उदाहरण:

एक्सएमएल:

<data> 

    <variable 
     name="item" 
     type="com.yourpackage.Model"/> 
     </data> 
     ...... 

      <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@{item.resId}"/> 

मॉडल:

public class Model { 

@DrawableRes 
private final int resId; 

public Model(int resId) { 
    this.resId = resId; 
} 

public int getResId() { 
    return resId; 
} 

@BindingAdapter ("android:src") 
public static void setImageResource(ImageView imageView, int resource){ 
    imageView.setImageResource(resource); 
} 

}

+0

कृपया बताएं कि क्या ऐसा करने का यही एकमात्र तरीका है या यह आपका तरीका है? कुछ बाइंडिंग एडाप्टर हैं जिन्हें कक्षा में समूहीकृत किया गया है, उदाहरण के लिए https://android.googlesource.com/platform/frameworks/data-binding/+/android-6.0.0_r7/extensions/baseAdapters/src/main/java/android/ डेटाबेस/एडाप्टर/TextViewBindingAdapter.java – chaser

+2

मुझे नहीं लगता कि मॉडल क्लास इस बाइंडिंग एडाप्टर को रखने के लिए एक अच्छी जगह नहीं है क्योंकि यह मॉडल के साथ जोड़े के लिए नहीं है। उदाहरण के लिए, मैं दो '@ बाइंडिंग एडाप्टर ("एंड्रॉइड: src") नहीं कर सकता हूं - एक छवि को 200x200 तक स्केल करने के लिए और दूसरा 400x400 पर स्केल करने के लिए। मुझे लगता है कि उन्हें विशेष रूप से बाइंडिंग के लिए कक्षा में रखना बेहतर हो सकता है (उदाहरण के लिए। 'बाइंडिंग एडाप्टर यूटिल्स')। – Sam

+0

@ सैम कस्टम विचारों के बिना बाध्यकारी एडाप्टर का उपयोग करते समय आपको कोई विचार है? मैंने दूसरी फाइल लाने की कोशिश की लेकिन मुझे यह नहीं पता कि टैग – TruongHieu

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