2016-02-10 12 views
32

मैं डेटा छवि लोड के लिए कस्टम बाध्यकारी एडाप्टर के लिए दस्तावेज़ बाध्यकारी आधिकारिक Android डेवलपर साइट से पीछा किया:एंड्रॉयड DataBinding कस्टम बाइंडिंग एडाप्टर चेतावनी

@BindingAdapter({"bind:imageUrl"}) 
    public static void loadImage(final ImageView imageView, String url) { 
     imageView.setImageResource(R.drawable.ic_launcher); 
     AppController.getUniversalImageLoaderInstance().displayImage(url, imageView); 
    } 
:

Warning:Application namespace for attribute bind:imageUrl will be ignored. 

मेरे कोड का पालन है

यह चेतावनी क्यों उत्पन्न होती है?

एक स्क्रीनशॉट भी जुड़ा हुआ है ... enter image description here

+1

आप एक ही नाम स्थान 'उपयोग कर रहे हैं" बाँध: "' अपने लेआउट में? – betorcs

उत्तर

58

मेरा मानना ​​है कि नाम स्थान सही मायने में BindingAdapter एनोटेशन में नजरअंदाज कर दिया है। चेतावनी तब होती है जब आप किसी भी नामस्थान उपसर्ग का उपयोग करते हैं, भले ही यह आपके लेआउट में उपयोग किए गए किसी से मेल खाता हो या नहीं। यदि आप नेमस्पेस को छोड़ देते हैं, जैसे:

@BindingAdapter({"imageUrl"}) 

... चेतावनी नहीं होती है।

मुझे संदेह है कि हमें चेतावनी देने के लिए चेतावनी मौजूद है कि स्ट्रिंग को एनोटेशन के कार्यान्वयन में एक कुंजी के रूप में उपयोग करने से पहले नाम हटा दिया गया है। जब आप लेआउट पर विचार करते हैं तो वे समझते हैं कि वे जो भी नामस्थान चाहते हैं, उन्हें घोषित करने के लिए स्वतंत्र हैं, उदा। app: या bind: या foo:, और एनोटेशन को उन सभी मामलों में काम करने की आवश्यकता है।

+1

ध्यान दें कि 'एंड्रॉइड:' नेमस्पेस एकमात्र अपवाद है: यदि आप 'एंड्रॉइड: ऑनक्लिक' जैसी अंतर्निहित विशेषता के लिए 'बाध्यकारी एडाप्टर' सेट कर रहे हैं, तो आप उपसर्ग शामिल कर सकते हैं और आपको कोई चेतावनी नहीं मिलेगी। –

1

इसे आज़माएं, मेरे लिए काम करें! मैं आशा करता हूं यह आपकी मदद कर सकते हैं। बाध्यकारी एडाप्टर के बिना छवि संसाधन बदलने के लिए सरल तरीका।

<ImageButton 
     ... 
     android:id="@+id/btnClick" 
     android:onClick="@{viewModel::onClickImageButton}" 
     android:src="@{viewModel.imageButton}" /> 

और देखें मॉडल कक्षा:

public ObservableField<Drawable> imageButton; 
private Context context; 

//Constructor 
public MainVM(Context context) { 
    this.context = context; 
    imageButton = new ObservableField<>(); 
    setImageButton(R.mipmap.image_default); //set image default 
} 

public void onClickImageButton(View view) { 
    setImageButton(R.mipmap.image_change); //change image 
} 

private void setImageButton(@DrawableRes int resId){ 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     imageButton.set(context.getDrawable(resId)); 
    }else{ 
     imageButton.set(context.getResources().getDrawable(resId)); 
    } 
} 
संबंधित मुद्दे