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

被折叠的 条评论
为什么被折叠?



