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
刚刚接触,学习了然后写了一篇简书记录一下,有什么不好的地方留言讨论一下,轻喷。
网友评论