美文网首页
dataBinding入门

dataBinding入门

作者: 会写代码的小猿猴 | 来源:发表于2021-05-20 16:40 被阅读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

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

    相关文章

      网友评论

          本文标题:dataBinding入门

          本文链接:https://www.haomeiwen.com/subject/pthbjltx.html