Android开发必看:一文教你完全理解DataBinding框架(下

本文详细介绍了Android DataBinding框架,包括支持双向绑定、绑定方法、表达式支持、避免空指针异常、在非UI线程更改数据等功能。通过实例展示了如何使用DataBinding进行高效开发,例如,利用双向绑定实现EditText与LiveData同步,以及自定义绑定以处理复杂场景。同时,文中还提到了DataBinding的预览窗口显示默认值、列表绑定、转换器和自定义双向绑定等高级特性。
摘要由CSDN通过智能技术生成

android:onClick=“inflateViewStub”
android:text=“Inflate the ViewStub”
/>



view_stub.xml 如下:

<?xml version="1.0" encoding="utf-8"?>


<LinearLayout
android:layout_width=“match_parent”
android:layout_height=“match_parent”
android:orientation=“horizontal”



代码如下:

// 设置 inflate 回调
mBinding.viewStub.setOnInflateListener(new ViewStub.OnInflateListener()
{
@Override
public void onInflate(ViewStub stub, View view)
{
// 得到 Binding 实例
ViewStubBinding binding = DataBindingUtil.bind(view);
User user = new User(“liang”, “fei”);
binding.setUser(user);
}
});

// isInflated 是 DataBinding 自动生成的方法,不是 ViewStub 的方法。可用于判断是否已 inflate
if (!mBinding.viewStub.isInflated())
{
mBinding.viewStub.getViewStub().inflate();
}

这个特别有用,因为可以判断 ViewStub 是否已经 inflate。

6. 支持双向绑定

比如 EditText,绑定了 LiveData,当 EditText 内容改变的时候,LiveData 的内容也会跟着变化。如下:

关键就是 @={},如此一来,我们就可以直接在 ViewModel 中取得 EditText 的内容数据了,因为 ViewModel 是不可以持有 View 实例的,所以如果没有 DataBinding,要获取 EditText 就只能通过 View 传给 ViewModel。有了 DataBinding 就方便多啦。

内置支持双向绑定的属性如下:

当然我们还可以自定义双向绑定的,后面再来说这个。

7. 支持绑定方法

上面我们的所有操作,都是绑定的变量,能绑定方法吗?当然可以。我们通过 onClick 事件来举例。

val onClick = View.OnClickListener {
Log.i(“MainViewModel”, “commonLog - onClick: 变量”)
}

fun onClick(v: View) {
Log.i(“MainViewModel”, “commonLog - onClick: 方法”)
}

fun onClick() {
Log.i(“MainViewModel”, “commonLog - onClick: 没有参数,或者有参数也行,但是 xml 中也必须给它传对应的值”)
}

其中双冒号 :: 绑定方法的签名必须和属性要求的对象方法签名一致。这里即 OnClickListener 的 onClick 方法。同样的,如果是 onLongClick 监听,那就要求你的方法有返回 Bool 值了。

第三种是表达式的写法,我们下面会说,学过 Java8 的都知道箭头 -> 和双冒号 :: 是 Lambda 表达式。

8. 支持表达式

DataBinding 支持部分表达式,还支持 Lambda 表达式,如上的点击事件,但是建议不要过于复杂,因为 DataBinding 不支持单元测试的,报错也不是很智能。支持的运算符和关键字如下:

没有 this、super、new 和显式泛型调用。示例如下:

android:text="@{String.valueOf(index + 1)}"
android:visibility="@{age > 13 ? View.GONE : View.VISIBLE}"
android:transitionName=’@{“image_” + id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值