您好我尝试使用数据绑定更新imageview,但我想知道如何正确操作。
我的var
@BindingAdapter({"bind:someImage"})
public void loadIt(ImageView view, String imageUrl) {
Picasso.with(view.getContext())
.load(getSomeImage())
.placeholder(android.R.drawable.alert_dark_frame)
.into(view);
}
public void setSomeImage(){
notifyPropertyChanged(BR.someImage);
}
我的布局
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imagePath"
app:imageUrl="@{var.someImage}"/>
答案 0 :(得分:6)
你使用了错误的属性来调用Binding方法,因为你已经定义了@BindingAdapter({"bind:someImage"})
,你需要在从xml调用它时使用someImage
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imagePath"
app:someImage="@{var.someImage}"/>
答案 1 :(得分:1)
您没有使用您在绑定适配器中设置的相同值,而是设置了@BindingAdapter({"bind:someImage"})
并使用了app:imageUrl
改用它:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imagePath"
bind:someImage="@{var.someImage}"/>
示例:
@BindingAdapter("loadImageUrl")
fun loadImageUrl(imageView: ImageView, url: String) {
Glide.with(imgView).load(url)
.placeholder(PLACE_HOLDER_IMAGE)
.into(imageView)
}
<ImageView
loadImageUrl="@{vm.url}"
android:layout_width="match_parent"
android:layout_height="match_parent" />
答案 2 :(得分:0)
如果您的数据模型包含图像的资源ID,则无需以编程方式执行任何操作即可执行此操作。
示例:
<layout>
<data>
<import type="android.support.v4.content.ContextCompat" />
<variable
name="roomInfoItem"
type="com.example......model.RoomInfoModel" /> </data>
<RelativeLayout>
<ImageView
android:id="@+id/iv_room_info_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</RelativeLayout>
</layout>
只需将以下行添加到您的imageView(当我在其中添加代码时,我无法格式化代码):
android:src =&#34; @ {ContextCompat.getDrawable(context,roomInfoItem.resId)}&#34;
其中resId包含R.drawable.your_image_name