android 关联英文,[翻译] Android Data Binding(6): 双向绑定

目前为止, 我已经向你们展示了如何使用Android Data Binding来更新UI及监听UI事件.但我们也会需要另一件事:将用户的输入反馈到程序模块中. Android2.1引入了"双向绑定"来实现这个功能.

双向绑定

假设我们有一个表格需要用户填写,里面包括了一个EditText用于接受用户名.单向绑定实现如下:

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@{user.firstName}"

android:id="@+id/firstName" />

通常,你会让用户输入数据然后提交表格. 或者你通过afterTextChanged() 函数来更新你的模块. 除了这样, 你还可以使用双向绑定操作符 @={} 自动将用户改变更新到你的view model中.

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@={user.firstName}"/>

由于当用户输入时, model就会自动更新, 我再也不用从EditText中捕获用户名了.同样ID也不再需要了.

双向绑定并不适用于所有属性, 只支持那些会发出"改变通知"的属性. 幸运的是这已经包含了大多数用于输入相关的属性. 由于Android Data Binding要最低兼容到API 7,所以没有新的framework层修改. 否则双向绑定可以支持所有属性.

View属性

可以在表达式中访问View的属性, 就像访问数据的属性一样:

android:id="@+id/showName"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

android:text="@{user.firstName}"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:visibility="@{showName.checked ? View.VISIBLE : View.GONE}"

/>

在上面的配置中, 只有当CheckBox被选中时, 展示用户名的TextView才可见. 这适用于双向绑定及所有可以使用data binding表达式的属性.

android:id="@+id/showName"

android:focusableInTouchMode="@{model.allowFocusInTouchMode}"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

android:text="@{user.firstName}"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:focusableInTouchMode="@{showName.focusableInTouchMode}"

/>

上面的例子展示了如何使用表达式链. 在Data Binding框架内部, 当看到"showName.focusableInTouchMode"时,会检查到它绑定到了"model.allowFocusInTouchMode", 并做简单的替换.

View引用

另一个很酷的事情是, 你可以在lambda表达式中通过View的ID引用他们.

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/firstName"

android:text="@={user.firstName}" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onCheckedChanged="@{()->handler.checked(firstName)}" />

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值