Jetpack中BindingAdapter的使用简单记录

14 篇文章 0 订阅
9 篇文章 1 订阅

BindingAdapter的简单使用

首先回顾一下kotlin中实现静态方法

  • 通过伴生对象实现

    这样当前类中所有的方法都可以直接类.方法名()调用

class ClassName{
    //包裹你要调取的方法
     companion object {
          //带有参数及返回值的方法
          fun staticFunName(context: Context): Int {
          }
    }
}
  • 通过将class关键字修改为object关键字

    这样当前类中所有的方法都可以直接 类.方法名() 调用

object StaticClassName{
    //包裹你要调取的方法
     companion object {
          //带有参数及返回值的方法
          fun staticFunName(context: Context): Int {
          }
    }
}

下面介绍BindingAdapter的简单使用

  • 创建一个kotlin文件,声明静态方法,两种实现形式,上方已经写明

    setImage方法需要通过注解声明,并且是静态方法

    BindingAdapter:注解中传入的字符串为xml文件中View组件要使用的命名空间的名称

    JvmStatic:BindingAdapter中两种调用静态方法需要加上这个注解,不然会报错

    报错内容如下:

    Companion is not static and requires an object to use, retrieved from the DataBindingComponent.

    BindingAdapter在代码中静态方法的实现

    class SecondViewModel {
        companion object {
            @BindingAdapter("image_namespace")
            @JvmStatic
            fun setImage(view: ImageView, url: String) {
                Log.i("tag", "url---->>" + url)
            }
        }
    }
    
  • xml里在data标签中定义String类型的参数url_image

    url_image参数传入app:image_namespace="@{url_image}"

    image_namespace为上面方法注解中的定义的字符串

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:bind="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">
    <data>
        <variable
            name="url_image"
            type="String" />
    </data>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            app:image_namespace="@{url_image}" />
    </LinearLayout>
</layout>
  • 最后在Activity文件需要实现的代码

    上面的setImage方法会进行回调,指定kotlin代码

var databind: ActivityMainBinding= DataBindingUtil.setContentView(this, R.layout.activity_main)
//调用xml文件中声明的url_image参数,并且赋值
databind.url_image = "http://www.baidu.com"

多参数的使用

  • xml中的实现
        <ImageView
            android:layout_width="50dp"
            android:layout_height="50dp"
            app:image1="@{url_image}"
            app:image2="@{size_image}" />
  • 代码中实现
        @BindingAdapter(value = ["image1", "image2"], requireAll = false)
        @JvmStatic
        fun setImage(view: ImageView, url: String, size: Int) {
            Log.i("tag", url + ">>>" + size)
        }

这里 requireAll = false 表示我们可以使用这两个两个属性中的任一个或同时使用,如果requireAll = true 则两个属性必须同时使用,不然报错。默认为 true。

参考内容:

https://developer.android.com/topic/libraries/data-binding#java

需要完善的内容:

可选旧值的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值