做为一个Android开发者,期间很多人在网上分享了很多经验,从中得到了很多帮助,觉得大家都很有分享精神,于是今天开始决定开始写博客,和大家一起分享一些平时用到的知识,更多的是想有一个学习过程的总结,好,开始今天的主题,现在大家在项目的实际开发中很多用到了MVVM的开发模式,而说到MVVM就不得不提DataBinding,DataBinding是谷歌在2015年I/O大会上介绍的一个数据绑定框架,是实现MVVM模式的一个工具,省去了我们原来的findViewById去绑定控件,下面来看如何在应用中引入DataBinding
构建环境
配置你的应用程序使用数据绑定,在应用程序模块(app module)的build.gradle文件添加数据绑定元素,需要注意的是Android Studio的版本需要在1.3以上
android { dataBinding { enabled = true }}接下来看数据绑定的布局文件<?xml version="1.0" encoding="utf-8"?><!--现在的根节点--><layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.qiudengjiao.databindingtext.User" /> </data> <!--原来的根节点--> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@{user.userName}" android:textSize="30dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.userAccount}" /> </LinearLayout></layout>和原来我们的布局相比增加了最外层的layout根节点,而不是原来的ViewGroup根节点,其他的就是增加了data和variable节点,剩下的基本和我们原来所写的布局文件基本一样,我们来具体分析一下<data> <variable name="user" type="com.example.qiudengjiao.databindingtext.User" /> </data>在data节点中声明了一个user变量,数据中的User变量描述此布局中可能使用的属性,其中type属性就是在java中定义的User类,这里需要注意的是必须把类的完全包名路径写上<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@{user.userName}" />布局中的表达式使用“@{ }”语法在属性中写入,在这里,TextView的文本设置为用户userName属性数据对象/** * java bean */public class User { PRivate String userName; private String userAccount; public User(String userName, String userAccount) { this.userName = userName; this.userAccount = userAccount; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserAccount() { return userAccount; } public void setUserAccount(String userAccount) { this.userAccount = userAccount; }}数据绑定public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); User user = new User("Text","User"); binding.setUser(user); }}这里把原来的setContentView()用DataBindingUtil.setContentView()替换,注意到生成的binding对象ActivityMainBinding和布局文件的名字是一致的,也就是说如果布局文件的的名称是activity_mian.xml,则生成的类就是ActivityMainBinding,然后创建一个User对象,通过setUser()与variable进行绑定,这里需要注意的是ActivityMainBinding是自动生成的,所有的set方法也是根据variable名称生成的,数据与variable绑定之后,xml的UI元素就可以直接使用了,到这里数据的绑定就算完成了,但是我们在实际项目中往往还需要命令绑定,接下来我们看一下命令的绑定命令绑定我们接着在刚才代码的基础上去写<?xml version="1.0" encoding="utf-8"?><!--现在的根节点--><layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.example.qiudengjiao.databindingtext.User" /> <variable name="presenter" type="com.example.qiudengjiao.databindingtext.Presenter" /> </data> <!--原来的根节点--> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="@{presenter.onClickCommand}" android:text="@{user.userName}" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@{user.userAccount}" /> </LinearLayout></layout>然后再创建一个Presenter类,这里我们定义了一个点击事件响应的方法public class Presenter { public void onClickCommand(View view) { Toast.makeText(view.getContext(), "点我了", Toast.LENGTH_SHORT).show(); }}从上面的xml文件以及Presenter类结合上面的数据绑定,想必我们也能看出规律了,就是在data节点下新增一个variable节点,并且和Presenter类进行绑定,需要注意的是Presenter里面的方法需要写View参数,最后别忘了在MainActivity中初始化Presenter类public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); User user = new User("Text","User"); Presenter presenter = new Presenter(); binding.setPresenter(presenter); binding.setUser(user); }}这样点击事件就绑定成功了,这样我们就完成了数据和点击事件的绑定,这里只做基本介绍,如果大家想更加深入的了解Data相关的知识可以点击DataBinding,这是AndroidDataBinding的官方网站,今天就写到这里
新闻热点
疑难解答