Android DataBinding自定义绑定适配器警告

asa*_*azi 56 android android-layout android-studio android-databinding

我跟着数据绑定文件自定义绑定适配器用于图像加载从官方Android开发者网站: http://developer.android.com/tools/data-binding/guide.html

成功编译代码后,我得到一个警告:

Warning:Application namespace for attribute bind:imageUrl will be ignored.
Run Code Online (Sandbox Code Playgroud)

我的守则如下:

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

为什么会产生此警告?

还附上了截图...在此输入图像描述

Lor*_*rte 98

我相信在BindingAdapter注释中真正忽略了命名空间.如果使用任何名称空间前缀,则会发出警告,无论它是否与布局中使用的名称前缀匹配.如果省略命名空间,如下所示:

@BindingAdapter({"imageUrl"})
Run Code Online (Sandbox Code Playgroud)

......警告不会发生.

我怀疑存在警告,提醒我们在将字符串用作注释实现中的键之前,命名空间被剥离.这使得当你考虑感布局可以自由申报任何他们想要的命名空间,例如app:bind:foo:和注释,需要在所有的情况下工作.

  • 注意``android:`命名空间是唯一的例外:如果你为`android:onClick`这样的内置属性设置`BindingAdapter`,你可以包含前缀,你不会得到任何警告. (8认同)

Khe*_*raj 11

实际上仍然有一些教程为BindingAdapter注释添加前缀。

@BindingAdapter({"imageUrl"})不带任何前缀使用。

<ImageView
    imageUrl="@{url}"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

专家提示

你不会得到使用时警告android:中的前缀BindingAdapter。因为这是被鼓励的。我会建议使用@BindingAdapter("android:src")而不是创建一个新属性。

@BindingAdapter("android:src")
public static void setImageDrawable(ImageView view, Drawable drawable) {
    view.setImageDrawable(drawable);
}
Run Code Online (Sandbox Code Playgroud)

@BindingAdapter("android:src")
public static void setImageFromUrl(ImageView view, String url) {
   // load image by glide, piccaso, that you use.
}
Run Code Online (Sandbox Code Playgroud)

仅在需要时创建新属性。