32

Я последовал за связывание документации для пользовательского Binding адаптер для загрузки изображения с официального сайта Android Developers данные: http://developer.android.com/tools/data-binding/guide.htmlAndroid DataBinding Пользовательские привязки адаптера Предупреждение

После успешной компиляции кода я получаю предупреждение, которое:

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

Мой код выглядит следующим образом:

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

Почему это предупреждение генерируется?

также прилагается скриншот ... enter image description here

+1

Вы используете один и тот же пространство имен ' "привязки:"' в форматам? – betorcs

ответ

58

Я считаю, что пространство имен действительно игнорируется в BindingAdapter аннотацию. Предупреждение возникает, если вы используете какой-либо префикс пространства имен, независимо от того, совпадает ли он с используемым в вашем макете или нет. Если вы пропустили пространство имен, например:

@BindingAdapter({"imageUrl"}) 

... предупреждение не происходит.

Я подозреваю, что существует предупреждение о том, что пространство имен удаляется до того, как строка используется в качестве ключа в реализации аннотации. Что имеет смысл, если вы считаете, что макеты могут объявлять любые пространства имён, например, app: или bind: или foo:, и аннотация должна работать во всех этих случаях.

+1

Обратите внимание, что пространство имен 'android:' является единственным исключением: если вы устанавливаете 'BindingAdapter' для встроенного атрибута, такого как' android: onClick', вы можете включить префикс, и вы не получите никакого предупреждения. –

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