DataBinding赋值本地图片src

本文介绍了解决在使用DataBinding时,为ImageView设置本地资源图片的问题。通过自定义BindingAdapter,实现正确显示目标图片,避免出现颜色块替代图片的情况。
databinding赋值的时候直接
android:text="@{model.getName()}"

即可。但是,如果为图片赋值本地资源时

android:src="@{model.getIcon()}"

运行效果却不是目标图片,而是一块颜色。

解决如下:

public class BindingAdapters {

    @BindingAdapter("android:src")
    public static void setSrc(ImageView view, int resId) {
        view.setImageResource(resId);
    }
}

在工程中添加如上BindingAdapters类即可。

要使用 DataBinding 绑定 `src` 属性,可通过自定义 `BindingAdapter` 来实现。因为不是所有属性都能直接用 DataBinding 绑定,若没有合适的绑定方法就需要自定义。 首先,编写一个处理图片的自定义 `BindingAdapter` 类,然后定义一个静态方法,添加 `@BindingAdapter` 注解,注解值是 `ImageView` 控件自定义的属性名。以下是示例代码: ```kotlin import android.widget.ImageView import androidx.databinding.BindingAdapter import com.bumptech.glide.Glide object MainActivityBindingAdapter { @BindingAdapter("imageSrc") @JvmStatic fun loadImage(view: ImageView, imageUrl: String) { Glide.with(view.context) .load(imageUrl) .into(view) } } ``` 在上述代码中,定义了一个名为 `imageSrc` 的自定义属性,使用 Glide 库加载图片并设置到 `ImageView` 中。 在 XML 布局文件中使用该自定义属性进行绑定: ```xml <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <variable name="imageUrl" type="String" /> </data> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" app:imageSrc="@{imageUrl}" /> </layout> ``` 在代码中设置数据: ```kotlin import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import com.example.databindingexample.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) val imageUrl = "https://example.com/image.jpg" binding.imageUrl = imageUrl } } ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值