Databinding中ImageView的用法和坑(Java和Kotlin),附带Glide用法

3 篇文章 0 订阅
1 篇文章 0 订阅

Databinding相信开发过Android的人肯定不陌生,极大的简化了代码量,而且易于维护,不过中间的坑也是很多的,尤其是对于很多新手来说,如果用错了,简直可以用“一脸懵逼”来形容,因为databinding根本不会告诉你xml中的错误错在哪,不过studio3.4之后貌似有了错误的提示,比如哪个参数没找到之类的,不过还是没有像普通的代码一样能够直接提示到第几行。。。

TextView的用法很简单,只要把需要的String字符串传入就行,但是ImageView就不是这样了,用法有着很明显的不同。尤其是Kotlin和Databinding的结合,更是坑不少,下面我简单讲下Java和Kotlin中的ImageView和Databinding的用法:

一、Java:

    @BindingAdapter({"app:imgUrl"})
    public static void getTransImageView(ImageView imageView,  int res) {
        imageView.setImageResource(res);
    }

      
 <ImageView
            android:layout_width="40dp"
            android:layout_height="40dp"
            app:imgUrl="@{bean.res}"
            />

1、如上面的代码这样,很简单,写一个静态方法,重点就是这个 @BindingAdapter 注解,ImageView本身无法直接在xml中使用android:src 属性来动态改变图片的属性,需要额外使用注解和对应的方法名称,其中app:imgUrl 这个是自定义的方法名称,也可以写成aa:imgUrl,或者aa:bb等等,但是千万不要写android:imgUrl !!!因为android是系统的方法,会报错,显示方法未找到!!!
2、里面的参数可以自定义,但是一定要有ImageView的参数,而且不需要传入任何ImageView对象,因为这个是本身
3、在xml中,直接使用刚刚自定义的方法app:imgUrl="@{bean.res}",大功告成

二、Kotlin

        @BindingAdapter("app:imgUrl")
        @JvmStatic
        fun load(imageView: ImageView, res: Int) {
          imageView.setImageResource(res);
        }

1、Kotlin的注解略微不同,如果小伙伴照搬Java,就会报错,仔细观察,你会发现里面少了一个 {}
2、并且Kotlin使用静态方法,一定要额外加@JvmStatic 注解,因为Kotlin实际上是没有静态方法的,虽然Object类和companion object 方法美其名曰静态,但不是真实的静态,和java还是有区别的,只能叫做形式上的静态
3.xml中的使用和java一样,无区别

PS:如果小伙伴需要使用Glide结合Databinding怎么办呢?
直接获得view的context传入即可,Java也一样

        @BindingAdapter("app:imgUrl")
        @JvmStatic
        fun load(view: ImageView, url: String) {
            Glide.with(view.context).load(url).into(view)
        }
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值