2016-02-10 19 views
32

Tôi làm theo các dữ liệu ràng buộc tài liệu cho Adaptor Tuỳ chỉnh Binding cho hình ảnh tải từ chính thức phát triển Android tại chỗ: http://developer.android.com/tools/data-binding/guide.htmlAndroid DataBinding Tuỳ chỉnh Binding Adaptor Cảnh báo

Sau khi biên dịch thành công mã tôi nhận được một cảnh báo đó là:

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

Mã của tôi là như sau:

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

Tại sao cảnh báo này được tạo?

Một ảnh chụp màn hình cũng được đính kèm ... enter image description here

+1

Bạn có sử dụng namespace cùng ' "ràng buộc:"' trong bố trí của bạn? – betorcs

Trả lời

58

Tôi tin rằng không gian tên được thực sự bỏ qua trong BindingAdapter chú thích. Cảnh báo xảy ra nếu bạn sử dụng bất kỳ tiền tố không gian tên nào, bất kể nó có khớp với tiền tố được sử dụng trong bố cục của bạn hay không. Nếu bạn bỏ qua không gian tên, như vậy:

@BindingAdapter({"imageUrl"}) 

... cảnh báo không xảy ra.

Tôi nghi ngờ cảnh báo tồn tại để cảnh báo cho chúng tôi không gian tên bị tước bỏ trước khi chuỗi được sử dụng làm chìa khóa trong quá trình triển khai chú thích. Điều này có ý nghĩa khi bạn xem xét bố cục tự do khai báo bất kỳ không gian tên nào họ muốn, ví dụ: app: hoặc bind: hoặc foo: và chú thích cần phải hoạt động trên tất cả các trường hợp đó.

+1

Lưu ý rằng không gian tên 'android:' là ngoại lệ duy nhất: nếu bạn đang thiết lập 'BindingAdapter' cho thuộc tính dựng sẵn như' android: onClick', bạn có thể bao gồm tiền tố và bạn sẽ không nhận được bất kỳ cảnh báo nào. –

1

Hãy thử tính năng này, phù hợp với tôi !. Tôi hy vọng điều này có thể giúp bạn. Cách đơn giản để thay đổi tài nguyên hình ảnh mà không cần bộ điều hợp ràng buộc.

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

và Xem Mẫu Class:

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)); 
    } 
}