2016-10-07 5 views
6
पर बाध्यकारी

मैं कहाँ Holder कक्षा में विधि नीचेसेट पाठ डेटा का उपयोग कर रंग एंड्रॉयड

public int getTitleColor(Context context, Item item) { 
    ... 
} 

कोई फर्क नहीं पड़ता की तरह परिभाषित किया गया है बाध्यकारी पुस्तकालय

android:textColor="@{holder.getTitleColor(context, item)}" 

डेटा का उपयोग कर TextView पाठ रंग सेट करने के लिए कोशिश कर रहा हूँ अगर मैं रंग int (@ColorInt) या रंग संसाधन (@ColorRes) लौटाता हूं तो यह टेक्स्ट को ठोस सफेद रंग देता है। मैं क्या गलत कर रहा हूं?

उत्तर

11

से कॉल करने के द्वारा विधि बनाने मैं int प्रदान कर रहे हैं एक हेक्स रंग के रूप में व्याख्या की है, यह इस है कि सहज लगते हैं, भले ही लगता है सेटटर को संसाधन आईडी की उम्मीद करनी चाहिए।

प्रत्येक bindable देखने के लिए उत्पन्न Context संदर्भ का उपयोग करें, और इसका इस्तेमाल करते हैं, रंग आप ओर इशारा करते हैं करने के लिए संसाधन आईडी कन्वर्ट करने के लिए described in the DataBinding Dev Guide के रूप में:

एक विशेष चर संदर्भ नामित बंधन में उपयोग के लिए उत्पन्न होता है आवश्यकतानुसार अभिव्यक्तियां। संदर्भ के लिए मान रूट व्यू के getContext() से संदर्भ है।

यह प्रयोग इस तरह रंग सेट करने के:

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@{data.text}" 
      android:textColor="@{context.getColor(data.colorRes)}" 
      /> 
+4

के साथ यदि आप इस समाधान को एपीआई स्तर के निचले हिस्से में उपयोग करने का प्रयास करते हैं 23 से अधिक, आपको "java.lang.No.SuchMethodError" इंगित करने में त्रुटि मिलती है। उन लोगों के लिए जिन्हें पिछले संस्करणों के लिए समाधान की आवश्यकता है, इसका उपयोग करें: ** एंड्रॉइड: textColor = "@ {context.getResources()। GetColor (data.colorRes)}" ** – Fer

3

BindingAdapter

@BindingAdapter({"bind:color"}) 
public static void setFont(TextView textView, Item item) { 
    textView.setTextColor(<set color of your choice>); 
} 

उपयोग करने और इसे एक्सएमएल

app:color="@{item}" 
+0

कोई स्पष्टीकरण क्यों मेरे विधि काम नहीं करता है? यह एंड्रॉइड द्वारा आवश्यक int को वापस देता है: textColor, मुझे नहीं पता कि प्रश्न में कोड के साथ क्या गलत है। – tomrozb

+0

अपनी विधि में कुछ लॉग डालें और जांचें कि यह वहां जा रहा है या नहीं, क्योंकि डेटाबेस के साथ मैं ऐसा नहीं सोचता हूं ताकि आप इस तरह की विधि को कॉल कर सकें और यह भी वापसी मूल्य –

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