DataBinding 使用全面详解
https://juejin.im/entry/59116fd02f301e0057e7e8db
官方文档
https://developer.android.com/topic/libraries/data-binding/index.html#method_references
Android Data Binding(数据绑定)用户指南 (官方文档中文版)
http://www.jianshu.com/p/b1df61a4df77
在xml文件中的写法
绑定
这个时候界面上已经显示出更新的值了
Android Data Binding 系列(一) -- 详细介绍与使用
Databinding 是一个实现数据和UI绑定的框架,是一个实现 MVVM 模式的工具,有了 Data Binding,在Android中也可以很方便的实现MVVM开发模式。
github
https://github.com/LyndonChin/MasteringAndroidDataBinding
https://github.com/ConnorLin/DataBindingDemo
http://blog.zhaiyifan.cn/2016/06/16/android-new-project-from-0-p7/
侦听器绑定是在事件发生时运行的绑定表达式。它们与方法引用类似,但它们允许您运行任意数据绑定表达式。此功能适用于Gradle版本2.0及更高版本的Android Gradle插件。 在方法引用中,方法的参数必须与事件侦听器的参数相匹配。在侦听器绑定中,只有您的返回值必须与侦听器的预期返回值相匹配(除非它是期望的void)。例如,您可以有一个演示者类具有以下方法:
Android 数据绑定框架DataBinding,堪称解决界面逻辑的黑科技
https://github.com/chiclaim/awesome-android-mvvm(demo中有一个自定义的加载对话框)
比较全面
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0812/3293.html
https://juejin.im/entry/59116fd02f301e0057e7e8db
目前用的demo(下方链接)
有demo
Android Data Binding高级用法-Observable、动态生成Binding Class(三)
Android-MVVM架构-Data Binding的使用(讲的比较清晰)
http://blog.csdn.net/johnny901114/article/details/50706329
讲的很清楚
http://www.jianshu.com/p/3410420f81ab
把值(modelview与xml)关联起来 通过set方法。
赋值也需要进行set方法,这样xml中才能生效
type 属性就是我们在 Java 文件中定义的 类名称。
如果导入相同的类处理方法:
类型别名
如果我们在 data 节点了导入了两个同名的类怎么办?
记住一定要设置才能有“相应”binding.setBtn(this); ()括号中代表当前对象
android:visibility="@{user.isRegister ? View.VISIBLE : View.INVISIBLE}"
user后面跟的是方法名称 isRegister(),其他的也是的
@Bindable 用法,这种方式它会自动找到get方法,来关联起来
@Bindable
publicString getMessageContent() {
returnentity.getMessageContent();
}
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(intfieldId)
get获取最新的值
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: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中发出通知,这样就实现了响应
http://www.jianshu.com/p/ba4982be30f8
最新
http://www.jianshu.com/p/ba4982be30f8
https://github.com/ConnorLin/DataBindingDemo
方法绑定和监听绑定
android:onClick="@{handlers::onClickFriend}"
android:onClick="@{() ->presenter.onSaveClick(task)}"
最灵活的方式当然是监听绑定,它允许您为事件监听器提供的回调提供不同的参数。
方法binding 默认会有一个参数 (仅在方法binding中)
而监听binding
方法的参数必须和事件监听器参数相匹配,返回值要是一样的类型
这个写的比较好
关于参数
参数有两种选择:要么不写,要么就要写全。
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{() -> handler.onTaskClick(task)}" />
或
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();
}
}
让这个表达式生效的办法
publicclassPresenter{
publicvoidonSaveClick(Viewview,Tasktask){}
}
android:onClick="@{(theView) -> presenter.onSaveClick(theView, task)}"
学习datebinding应看官方文档,结合自己的demo和别人的demo进行学习,以官方的文档为主。
http://connorlin.github.io/2016/07/02/Android-Data-Binding-%E7%B3%BB%E5%88%97-%E4%B8%80-%E8%AF%A6%E7%BB%86%E4%BB%8B%E7%BB%8D%E4%B8%8E%E4%BD%BF%E7%94%A8/
https://developer.android.com/topic/libraries/data-binding/index.html#generated_binding