DataBinding的用法介绍

DataBinding的用法介绍

DataBinding是Google 发布的一个数据绑定框架,它能够让开发者减少重复性非常高的代码,如findViewById 这样的操作。其核心优势是解决了数据分解映射到各个view的问题,在MVVM框架中,实现的View和Viewmode的双向数据绑定。

用法案列
1.在Module的build.gradle android模块中添加如下配置

android {
 dataBinding {
    enabled = true
 }
}

2.创建数据模型,比如一个简单的JavaBean对象

public class UserBean {
    private String name; 
    private int age; 

    public UserBean(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}

3.创建绑定数据的视图xml文件

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="user"
            type="com.example.databinding_demo.UserBean"/>
    </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:text="@{user.name}" />

        <!-- age 是int类型,需要转化为String-->
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{String.valueOf(user.age)}"/>
    </LinearLayout>
</layout>

这里我们使用Layout作为根节点,里面包含了data节点和布局文件,这里的data节点是连接View与Modle的通道,在data中声明variable变量,配置Bean对象,这样我们就可以在xml中通过@{}方法直接使用变量的数据。括号中直接引用Bean对象的属性完成赋值,注意这里的类型转换为String类型。

4.Activity中布局引入和赋值

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
        UserBean bean = new UserBean("zhangsan",30);
        binding.setUser(bean);
    }

这里用DataBindingUtil.setContentView代替了setContentView,然后创建一个 UserBean 对象,通过 binding.setUser(userBean) 与 variable 进行绑定。
注意:这个ActivityMainBinding 是继承ViewDataBinding,这个类的生成是有规则的,它是根据对应的布局文件的名字生成的,比如:activity_main–>ActivityMainBinding 、fragment–>FragmentBinding即:第一个单词首字母大写,第二个单词首字母大写,最后都会拼上Binding就是生成的Binding类。

DataBinding 绑定的数据除了Bean对象外,还可以是Java中的任意数据类型,比如基础数据类型,List,map,数组等

    <data>  
        <variable  
            name="str"  
            type="String"/>  
        <variable  
            name="age"  
            type="int" /> 
             
        <import type="java.util.List" />
        <import type="java.util.Map" />

       <variable
            name="list"
            type="List<String>" />

        <variable
            name="map"
            type="Map<String,Object>" />

        <variable
            name="array"
            type="String[]" />
    </data>  

注意,如果这里的泛型支持报红线,或者编译不过,请使用转义字符代替,如 :
在这里插入图片描述
赋值方法如下:

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{list[0]}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{list.get(1)}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@{map[`key0`]}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{map.get(`key1`)}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="@{array[0]}" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{array[1]}" />

    </LinearLayout>

数据的初始化:

		List<String> list = new ArrayList<>();
        list.add("list01");
        list.add("list02");
        binding.setList(list);

        HashMap<String, Object> map = new HashMap<>();
        map.put("key0", "value01");
        map.put("key1", "value01");
        binding.setMap(map);
        
        String[] arrays = {"字符串1", "字符串2"};
        binding.setArray(arrays);

此文仅作为学习笔记,记录DataBinding的用法

博客参考:https://www.jianshu.com/p/70316eb4e0f8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值