kotlin下对Databinding 的研究

本文记录了在Kotlin下对DataBinding的研究过程。包括引入DataBinding的代码,遇到的数据刷新、点击事件触发和图片加载等问题及解决方法,如数据刷新需让bean类继承BaseObservable等,还提到研究初期无法定位bug的困扰。

kotlin下对Databinding 的研究

最近打算研究下Databinding,我使用的开发语言是kotlin。 对研究过程中产生的一些问题进行一下简单记录

1. 引入Databinding
     在build中android{ ...} 中加入  代码

dataBinding{
        enabled = true
    }

 2. 遇到的问题

    1.  数据刷新的问题 

        想要数据刷新,bean类需要继承  BaseObservable,需要刷新的属性 增加注解  @Bindable,  然后在需要刷新的数据 set()中加入  notifyPropertyChanged(BR.xx);   JAVA代码如下

public class User2 extends BaseObservable {
    @Bindable
    private String name = "";
    private String headImg = "";
    private int age = 0;

    public void setName(String name) {
        this.name = name;
        notifyPropertyChanged(BR.name);
    }

    ...
}

 kotlin中 实现效果如下

data class User(
    var name: ObservableField<String> = ObservableField<String>(),
    var headImg:ObservableField<String> = ObservableField<String>(),
    var age:ObservableField<Int> = ObservableField<Int>()
): BaseObservable() 

 kotlin中 刷新数据的时候,

user.name.set("龙傲天")

    2. 点击事件的触发

        研究点击事件的时候,发现网上一些写的不太完整,看着糊里糊涂的 ,自己总结了一下

         第一步,在activity中声明方法

fun onclick(v: View){
        Log.e("MVVM","name")
}

       第二步,在xml中 引入 

<data>
    ...

    <variable
        name="click"
        type="com.lx.mvvmdemo.MainActivity" />
</data>

点击事件

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="@{click.onclick}"
        android:text="点击事件"/>

        最后要在activity中把点击事件方法绑定到databinding上面

mainActivitydatabinding!!.click = this

 现在点击事件可以响应了。

 3.  图片加载 

  我使用的是Glide。

 创建  ImageBindingAdapter,方法要添加注解。  headImg  这个字段很重要

object ImageBindingAdapter {
   
    @JvmStatic
    @BindingAdapter("headImg")
    fun setHeadImage(view: ImageView, url: String){
        Glide.with(view).applyDefaultRequestOptions(RequestOptions().circleCrop()).load(url).placeholder(R.mipmap.ic_launcher).into(view)
    }
}

  引入数据 

在xml中引入数据

<data>
    
    <variable
        name="user"
            type="com.liangxin.mvvmdemo.User" />
</data>

写ImageView   这里用的上面的headImg 字段   别忘了增加   xmlns:app="http://schemas.android.com/apk/res-auto"

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:headImg="@{user.headImg}"/>

刚开始研究Databinding,发现有个问题,就是无法定位bug。比较纠结。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值