2016-02-10 21 views
32

Ben resmi Android Geliştiricileri sitesinden görüntü yükleme için Özel Cilt Adaptörü belgelerine bağlanma verileri takip:Android DataBinding Özel Bağlama Adaptörü Uyarı

@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. 

Benim Kod olarak izleyin

Bu uyarı neden oluşturuluyor?

ekran görüntüsü de takılır ... enter image description here

+1

aynı ad 'kullanıyor musunuz "bağlamak:"' Niz? – betorcs

cevap

58

ben ad gerçekten BindingAdapter ek açıklamada göz ardı edilir inanıyoruz. Uyarı, düzeninizde kullanılanla eşleşip eşleşmediğine bakılmaksızın herhangi bir ad alanı öneki kullanırsanız oluşur. Bunu gibi ad, atlarsanız:

@BindingAdapter({"imageUrl"}) 

... uyarı oluşmaz.

Dize, ek açıklamanın uygulamasında anahtar olarak kullanılmadan önce, ad alanının kaldırıldığını bildirmek için uyarının varlığından şüpheleniyorum. Paftaları düşündüğünüzde mantıklı olan şey, istedikleri ad alanlarını bildirmekte serbesttir, örn. app: veya bind: veya foo: ve ek açıklamaların tüm bu durumlarda çalışması gerekir.

+1

'android:' namespace'in tek istisna olduğunu unutmayın: 'android: onClick' gibi yerleşik bir öznitelik için 'BindingAdapter' ayarlıyorsanız, öneki ekleyebilir ve herhangi bir uyarı almayacaksınız. –

1

Bunu deneyin, benim için çalışın! umuyorum ki bu sana yardım edebilir. Bağdaştırıcı adaptör olmadan görüntü kaynağını değiştirmek için basit bir yol.

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

ve Görünüm Modeli Sınıf:

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)); 
    } 
} 
İlgili konular