首页 > 系统 > Android > 正文

Android DataBinding 初探

2019-11-07 23:38:41
字体:
来源:转载
供稿:网友

做为一个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的官方网站,今天就写到这里

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表