
在使用MVVM
架构模式开发App
的时候,我们肯定会使用到DataBinding
组件,这个组件能让页面和布局文件更加解耦。这篇博客来分享一下DataBinding
相关的知识,希望对看文章的小伙伴有所帮助。
DataBinding的优势
- 代码更加简洁,可读性会更高。部分和UI控件有关的代码可以在布局文件当中完成。
- 不需要使用
findViewById()
方法。 - 布局文件可以完成简单的业务逻辑处理。
打开DataBinding
android{
...
buildFeatures.dataBinding = true
}
使用示例
<?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">
<data>
<variable
name="book"
type="com.yb.test.bind.BookBean" />
</data>
<LinearLayout xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context=".bind.BindActivity">
<TextView
android:id="@+id/titleTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{book.title}" />
<TextView
android:id="@+id/authorTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@{book.author}" />
<TextView
android:id="@+id/ratingTv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@{book.rating}" />
</LinearLayout>
</layout>
XML
代码解析:
-
layout
标签是告诉系统我们希望对这个布局文件进行绑定,系统会帮我们生成ActivityXXXBinding
类; -
data
标签是用来存放所有的布局文件所有的数据; -
<variable>
标签是定义布局变量对象的类型和名称; -
@{}
是对控件的赋值,这是一个布局表达式。
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import com.yb.test.BR
import com.yb.test.R
import com.yb.test.databinding.ActivityBindBinding
class BindActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivityBindBinding>(this,R.layout.activity_bind)
// 设置数据到XML
binding.setVariable(BR.book,BookBean("阿博的博客","阿博","五星好评"))
binding.titleTv.text = "阿博的博客"
}
}
Kotlin
代码解析:
-
DataBindingUtil.setContentView<ActivityBindBinding>(this,R.layout.activity_bind)
,获取绑定的布局; -
setVariable
,设置整个数据类; -
binding.控件名称
,我们可以通过binding
获取到相应的控件。
网友评论