Предупреждение адаптера привязки Android DataBinding
Я выполнил документацию по привязке данных для Custom Binding Adapter для загрузки изображений с официального сайта разработчиков Android:
http://developer.android.com/tools/data-binding/guide.html
После успешной компиляции кода я получаю предупреждение, которое:
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);
}
Почему это предупреждение генерируется?
Также прилагается скриншот... ![введите описание изображения здесь]()
Ответы
Ответ 1
Я считаю, что пространство имен действительно игнорируется в аннотации BindingAdapter
. Предупреждение возникает, если вы используете какой-либо префикс пространства имен, независимо от того, совпадает ли он с используемым в вашем макете или нет. Если вы пропустили пространство имен, например:
@BindingAdapter({"imageUrl"})
... предупреждение не происходит.
Я подозреваю, что существует предупреждение, чтобы предупредить нас, что пространство имен отключено до того, как строка используется в качестве ключа в реализации аннотации. Что имеет смысл, если вы считаете, что макеты могут объявлять любые пространства имён, например, app:
или bind:
или foo:
, и аннотация должна работать во всех этих случаях.
Ответ 2
Попробуй, работай для меня!. Я надеюсь это тебе поможет. Простой способ изменить ресурс изображения без привязки адаптера.
<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));
}
}