Android Data Binding基础用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a13069730106/article/details/52248533

功能简介

使用 data binding后,可以直接在Layout中进行数据绑定,无需在findViewById后手工设置数据了.简化的前端的开发负担.且使代码更加清晰.

导入DataBinding

现在android studio最新版本已内置了DataBinding功能.使用时只需要在build.gradle中加入如下代码

<!--加在anroid层级下-->
 dataBinding {
    enabled = true
 }

使用DataBinding.

定义entity

DataBinding实现的功能是将java实体里的数据绑定到Laoyout上,所以在使用前需要定义一下pojo,这里我简单写了个,当做参考

package com.peng.study.android.framework.databinding;

/**
 * Created by liupeng on 2016/8/16.
 */

public class UserEntity {
    public String name;
    public String password;

    public UserEntity(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public String getPassword() {
        return password;
    }

}

这里的实体现在应该个应用都有的,所以无需对原始代码做调整

修改Layout文件

如需要使用DataBinding,需要对原始的Layout文件进行一下修改,下面先看一个DataBinding的Layout

<?xml version="1.0" encoding="utf-8"?>
<!--DataBinding默认的根-->
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <!--数据名名称及类型-->
        <variable
            name="user"
            type="com.peng.study.android.framework.databinding.UserEntity"></variable>
    </data>
    <!--原始的根节点-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

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

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

        <Button
            android:id="@+id/button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button" />
    </LinearLayout>
</layout>

可以看到DataBinding的Layout文件的根节点为layout,下面根了一个data节点,里面是代表数据类型和名称的variable节点,在data节点下面才是原始的根节点
在EdtiText的text的属性是 @={user.name},可以看到我用的是 @= ,这里和绝大多数网上的资料都不一样,这是因为现在DataBinding已实现双向绑定功能.不但可以将实体的里的值直接赋值给Layout,也可以将Layout修改的值传回给实体

实现databinding.

做了上面的操作之后,还是不实能现DataBinding功能,还需要做Activity进行调整.先看代码,

package com.peng.study.android.framework.databinding;

import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;

import com.peng.study.android.R;
import com.peng.study.android.databinding.DataBindingActivityBinding;
import com.peng.study.android.util.LogUtil;

/**
 * DataBinding测试
 */
public class DataBindingActivity extends AppCompatActivity implements View.OnClickListener {
    UserEntity user;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContenetView改为DataBindingUtil.setContentView,为返回Layout文件名称置换成驼峰后加下Binding后缀的实现类
        DataBindingActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.data_binding_activity);
        //测试实体
        user = new UserEntity("testuser", "123456");
        //绑定数据,这里setUser为variable的name属性得来
        binding.setUser(user);
        //以为做测试双向绑定
        View viewById = findViewById(R.id.button);
        viewById.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        //测试双向绑定
        LogUtil.debug(user.getName());
        LogUtil.debug(user.getPassword());
    }
}

可以看到在onCreate里,原setContentView的方法修改成了DataBindingUtil的setContentView方法,并且返回了回Layout文件名称置换成驼峰后加下Binding后缀的实现类
之后使用这个实现类的的set方法就可以实数据绑定,而且当对EditText修改后,会直接对实体的值进行修改.在Log里输出.

这里的Demo比较简单,就不放演示的截图了

猜你喜欢

转载自blog.csdn.net/a13069730106/article/details/52248533