android datebinding学习

DataBinding 使用全面详解

官方文档

Android Data Binding(数据绑定)用户指南 (官方文档中文版)


在xml文件中的写法

绑定


这个时候界面上已经显示出更新的值了

Android Data Binding 系列(一) -- 详细介绍与使用
Databinding 是一个实现数据和UI绑定的框架,是一个实现 MVVM 模式的工具,有了 Data Binding,在Android中也可以很方便的实现MVVM开发模式。


github







侦听器绑定是在事件发生时运行的绑定表达式。它们与方法引用类似, 但它们允许您运行任意数据绑定表达式 。此功能适用于Gradle版本2.0及更高版本的Android Gradle插件。 在方法引用中,方法的参数必须与事件侦听器的 参数相匹配 。在侦听器绑定中,只有您的 返回值 必须与侦听器的预期返回值相匹配(除非它是期望的void)。例如,您可以有一个演示者类具有以下方法:


Android 数据绑定框架DataBinding,堪称解决界面逻辑的黑科技


https://github.com/chiclaim/awesome-android-mvvm (demo中有一个自定义的加载对话框)

比较全面


目前用的demo (下方链接)

有demo


讲的很清楚


把值(modelview与xml)关联起来 通过set方法。
赋值也需要进行set方法,这样xml中才能生效
type 属性就是我们在 Java 文件中定义的 类名称。

如果导入相同的类处理方法:

类型别名
如果我们在 data 节点了导入了两个同名的类怎么办?
< import type = "com.example.home.data.User" />< import type = "com.examle.detail.data.User" />< variable name = "user" type = "User" />

记住一定要设置才能有“相应” binding .setBtn( this ); ()括号中代表当前对象

android :visibility= "@{user.isRegister ? View.VISIBLE : View.INVISIBLE}"

user后面跟的是方法名称 isRegister(),其他的也是的


@Bindable 用法,这种方式它会自动找到get方法,来关联起来

@Bindable
public String getMessageContent() {
return entity .getMessageContent();
}

< TextView
android :id= "@+id/right_msg"
android :layout_width= "wrap_content"
android :layout_height= "wrap_content"
android :layout_gravity= "center"
android :layout_margin= "10dp"
android :text= "@{viewModel.messageContent}" />



Observable :

通过继承 BaseObservable 实现相应
set进行更新操作 notifyChange ()或者 notifyPropertyChanged ( int fieldId)
get获取最新的值
< TextView
android :layout_width= "wrap_content"
android :layout_height= "wrap_content"
android :text= "@{user.firstName}" />

< TextView
android :layout_width= "wrap_content"
android :layout_height= "wrap_content"
android :text= "@{user.lastName}" />

use.firstName和user.lastName会对应类中(会在xml布局中声明类的全路径com.example.User和变量user)的 get方法 ,特别是当set方法进行了更新通知,会进行更新get方法。这个就是 M层发生改变V层就能显示出来的原因,而连接这个的就是databinding





Observable Objects
Observable是提供添加移除监听的一个java接口,DataBinding基于此接口提供了一个基础类BaseObserable,我们可以这样使用它,通过Bindale注解绑定一个getter,当data属性发生改变在setter中发出通知,这样就实现了响应




最新



方法绑定和监听绑定
  android:onClick = "@{handlers::onClickFriend}"
android:onClick = "@{() -> presenter.onSaveClick(task)}"

最灵活的方式当然是监听绑定,它允许您为事件监听器提供的回调提供不同的参数。

方法binding 默认会有一个参数 (仅在方法binding中)


而监听binding

方法的参数必须和事件监听器参数相匹配,返回值要是一样的类型
这个写的比较好

关于参数

参数有两种选择:要么不写,要么就要写全。

<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{() -> handler.onTaskClick(task)}" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{(view) -> handler.onTaskClick(task)}"/>
lambda 表达式可添加一个或多个参数,同时参数可任意命名

public class EventHandler {
public void onTaskClickWithParams(View view, Task task) {
task.run();
}
}

让这个表达式生效的办法

public class Presenter {
    public void onSaveClick ( View view , Task task ){}
}
  android : onClick = "@{(theView) -> presenter.onSaveClick(theView, task)}"




自定义BindingAdapter用法:讲的很清楚

https://zhuanlan.zhihu.com/p/20839659


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值