dataBinding入门

2021-05-20  本文已影响0人  会写代码的小猿猴

dataBinding翻译过来的意思就是数据绑定,跟MVVM模式相关,也有人说MVVM=mvp+dataBinding,具体什么情况只能后续再花时间去研究了,今天先好好了解一下dataBinding,揭开它的神秘面纱。
我们直接来说它的使用方法吧,我简单地将它的使用方法归纳为以下几步:
1、加入依赖,将项目切换到project,在app目录下找到build.gradle,在里面加入

dataBinding {
        enabled = true;
    }

如图所示:


image.png

注意:
这句代码加入的位置是在android{}的大括号里面。

如果as版本在4.0以后,添加依赖如下:

bindingFeature{
        dataBinding= true;
    }

2、找到布局文件,将鼠标放在第一行,按Alt + Enter-->点击 “Convert to data binding layout”就会生成dataBinding的布局文件,生成的布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        
    </data>

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        tools:context=".MainActivity">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.appcompat.widget.LinearLayoutCompat>

3、创建一个类来存贮需要绑定的数据

data class ViewData (var name:String, var phoneNumber:String){
}

4、在布局文件的data里面声明变量和类全名

 <data>
        <variable
            name="view"
            type="com.example.databingdingdemo1.ViewData" />
    </data>

第一个属性name根据自己的爱好随便取名即可,第二个属性type是你第三步定义的类的完整路径(特别注意:此类类名首字母必须大写,否则运行时会报错)

5、将布局里面的控件与数据类的成员变量绑定
例如我创建的类里面有两个成员变量(name和phoneNumber),那我就在布局文件里面创建两个TextView来和他们绑定,绑定方法为text="@{data里的name.成员变量名}",比如我要绑定类里面的phoneNumber,

  android:text="@{view.phoneNumber}"

下面是我的布局代码

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="view"
            type="com.example.databingdingdemo1.ViewData" />
    </data>

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        tools:context=".MainActivity">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text='@{view.name+":"}' //------------------------------------核心语句
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{view.phoneNumber}"//------------------------------------核心语句
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.appcompat.widget.LinearLayoutCompat>
</layout>

6、在MainActivity里面进行绑定
这里我就直接贴代码了,都有注释的

package com.example.databingdingdemo1

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.example.databingdingdemo1.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        /*setContentView(R.layout.activity_main);*/
        var binding =
            DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)//定义一个 ActivityMainBinding
        var viewTest = ViewData("张志平", "184682974xx")//实例化数据类
        binding.view = viewTest//将实例化的类与定义的ActivityMainBinding里的类绑定
    }
}

再贴一张运行成功的效果图


image.png

刚刚接触,学习了然后写了一篇简书记录一下,有什么不好的地方留言讨论一下,轻喷。

上一篇下一篇

猜你喜欢

热点阅读