Android DataBinding 入门笔记

来源:互联网 发布:网络本科可以继续考研 编辑:程序博客网 时间:2024/05/29 14:27

最新写烦了findViewById,原来打算使用ButterKinfe的,突然想起来DataBinding,于是尝试一下;

首先启用DataBinding在项目gradle.build中设置

android {    defaultConfig {        ...        ...        dataBinding.enabled = true        ...    }}

JavaBean文件

public class UserBean {    private String userName;    private String userPhone;    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getUserPhone() {        return userPhone;    }    public void setUserPhone(String userPhone) {        this.userPhone = userPhone;    }}

layout文件

在布局文件activity_main.xml中修改布局根元素为<layout></layout>

<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        xmlns:tools="http://schemas.android.com/tools">    <data>        <variable            name="user"            type="com.tolcol.databindingdemo.bean.UserBean"/>    </data>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical"        tools:context="com.tolcol.databindingdemo.MainActivity">        <TextView            android:id="@+id/main_tv_name"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_margin="10dp"            android:text="@{user.userName}"            tools:text="userName"/>        <TextView            android:id="@+id/main_tv_phone"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_margin="10dp"            android:text="@{user.userPhone}"            tools:text="userPhone"/>    </LinearLayout></layout>

<data></data>:此标签内容是数据

<variable name="user" type="com.tolcol.databindingdemo.bean.UserBean"/>

userName属性设置的值就是在此布局文件中引用的名称,上述相当于java声明的
public UserBeanuser;
后面就可以在直接引用user对象了。
另外还有另一种写法:

<import type="com.tolcol.databindingdemo.bean.UserBean"/><variable name="user" type="UserBean"/>

用法同上;

更多待补充….

MainActivity文件

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);        //设置UserBean给xml data中定义的user        UserBean userBean = new UserBean();        userBean.setUserName("DB_userName");        userBean.setUserPhone("DB_userPhone");        binding.setUser(userBean);        binding.mainTvName.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //textView Name 点击事件            }        });    }}
  • 设置布局
ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);

原来的setContentView()替换为DataBindingUtil.setContentView(this,R.layout.activity_main);
这里的返回的变量ActivityMainBinding binding是DataBinding自动根据xml文件生成的类;

  • 给xml里面定义的user赋值
  UserBean userBean = new UserBean();  userBean.setUserName("DB_userName");  userBean.setUserPhone("DB_userPhone");  binding.setUser(userBean);

这里的setUser方法是框架自动根据中的name属性自动生成的set方法;
如果要获取空间,定义id之后可以通过binding.mainTvName获取控件;
mainTvName 对应的id就是main_tv_ name;
ps:命名风格因人而异,最好项目统一;

入门的最后:

  • databinding的好处这里就可以显现出来了,至于是否更加方便,还是看具体的项目;
  • databinding还支持一些逻辑判断,自定义View的设置值,双向绑定,这些以后有空会补充上来;

感谢阅读

原创粉丝点击