最近项目中使用到了BindingAdapter 下面来来看
既然用到了,配置的东西就不说了。首先建一个类
public class TemplateBindingAdapter {
@BindingAdapter({"url"})
public static void loadImage(ImageView view, List<FileEntity> entity) {
if (entity != null) {
Glide.with(view.getContext()).load(entity.get(0).Url + "?x-oss-process=video/snapshot,t_0100,f_jpg,w_0,h_0,m_fast,ar_auto").into(view);
}
}
@BindingAdapter(value = {"tagOne","tag_index"},requiredAll = false)
public static void taskTagOne(TextView view, List<String> tags,String tag_index) {
if (tags != null) {
view.setVisibility(View.VISIBLE);
if (tags.size() > 0) {
view.setText(tags.get(0));
Log.e("tag",tag_index);
} else {
view.setVisibility(View.GONE);
}
}
}
}
ImageVIew的实现
首先来看loadImage 上面标记的url 在xml中这样用
<ImageView
android:id="@+id/iv_video"
android:layout_width="match_parent"
android:layout_height="250px"
android:layout_below="@id/iv_template_video"
android:layout_marginTop="10px"
android:scaleType="centerCrop"
bind:url="@{taskDetail.files}" />
前面的bind 可以自行设置 通过url 的设置 调取上面的loadImage方法 实现图片的加载,相当于url和loadImage进行了绑定。第一个参数为ImageVIew自身,第二个为需要传递的参数。
TextView的实现
这里面只是简单的举个例子
传递两个参数的时候 可以如上面的taskTagOne方式来写,默认为需要全部传递,可以自行设置,是否需要传递全部参数。
<TextView
android:id="@+id/tag_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="24px"
app:tagOne="@{taskDetail.tags}"
app:tag_index='@{"666666666"}'
tools:text="好习惯培养" />
参照taskTagOne来看 传递了两个参数 一个是list参数,另一个是string类型参数,这里需要注意的是 tag_index 因为传递的是字符串类型,所以,外层要用单引号 ,然后里面的字符串是双引号 我就是在这里面卡了很久。后来才知道的。不过好低级的错误。还是得看文档啊!!