我试着从这里做一些模拟的例子:http://www.mutualmobile.com/posts/using-data-binding-api-in-recyclerview一切工作正常,除了图像url绑定。我收到错误:错误:执行任务':app:compileDebugJavaWithJavac'失败。
. lang。RuntimeException:发现数据绑定错误。****/数据绑定错误****msg:无法找到参数类型为java.lang.String的属性'app.imageUrl'的设置器。文件:D:Projectsappsrcmainreslayoutview_simple_item.xml loc:43:32 - 43:47 ****数据绑定错误****
我的布局:
...
<data>
<variable
name="item"
type="com.example.Item" />
</data>
...
<ImageView
android:id="@+id/iv_item"
app.imageUrl="@{item.imageUrl}"
... />
...
我的适配器:
package com.example.adapters;
import android.databinding.BindingAdapter;
import android.widget.ImageView;
import com.squareup.picasso.Picasso;
public class CustomBindingAdapter {
@BindingAdapter("bind:imageUrl")
public static void loadImage(ImageView imageView, String url) {
Picasso.with(imageView.getContext()).load(url).into(imageView);
}
}
找到问题了。而不是:
app.imageUrl="@{item.imageUrl}"
必须:app:imageUrl="@{item.imageUrl}"
设置BindingAdapter注解的参数为"app:imageUrl"。所以你必须有这个:
@BindingAdapter("app:imageUrl")
而不是:
@BindingAdapter("bind:imageUrl")
还有@Alexander Myznikov说的——把app.imageUrl
改成app:imageUrl
只能尝试重命名@BindingAdapter内部的引用
@BindingAdapter({"bind:image_url"})
public static void loadImage(ImageView imageView, String url) {
Picasso.with(imageView.getContext()).load(url).into(imageView);
}
在你的布局中:
...
<data>
<variable
name="item"
type="com.example.Item" />
</data>
...
<ImageView
android:id="@+id/iv_item"
app:image_url="@{item.imageUrl}"
... />
...