DataBinding—数据绑定,直接在 xml 中绑定数据并实现一些处理逻辑,实时动态刷新数据。

解决问题:

不再需要使用 findViewById,节省性能
更新 UI 数据不用切换至 UI 线程,不用再将数据分解映射到各个 view
注意:本文所有操作都基于 Android studio

环境配置
Android studio 构建项目时不会自带 DataBinding 功能,需要手动启用

在 build.gradle(Module:app) 文件中添加对 DataBinding 的支持:

android {
    ......
    dataBinding {
        enabled = true
    }
    ......
}

布局文件
在默认的布局文件的最外层嵌套一对 标签:

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

    <!-- 原布局文件 -->

</layout>

也可以使用快捷键,点击标签后按下 Alt+Enter ,再选择 “Convert to data binding layout”:

可以看到生成了 标签, 用于存放数据

当我们执行完这一步操作后,Android Studio 会自动生成 DataBinding 相关的编译文件,而且其命名一般是通过 xml 的文件名生成,例如:activity_main.xml,会生成 ActivityMainBinding,而 fragment_about则会生成 FragmentAboutBinding

数据绑定
当默认 Binding 类被生成后,我们就可以直接使用了

假设在项目中使用了一个 fragment_main.xml 片段,在对应的 MainFrangment.kt 中通过如下方式绑定:

class MainFragment : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val binding = DataBindingUtil.inflate<FragmentMainBinding>(inflater,
            R.layout.fragment_main, container, false)   // 绑定
        return binding.root
    }
}

事件处理
绑定成功后,就可以直接使用 DataBinding 自带的方法

假设在 fragment_main.xml 中有一个按钮和一个文本显示控件:

<Button
    android:id="@+id/choiceButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/choice" />

<TextView
    android:id="@+id/choiceTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/text" />

在 MainFrangment.kt 中的操作:

val binding = DataBindingUtil...
......
binding.choiceButton.text = "改变"  // 定义名称
binding.choiceButton.setOnClickListener{
    binding.choiceTextView.text="标签内容改变"
}   // 点击事件
......

本来按钮和文本显示控件都已经确定了名称,上面使用 DataBinding 的功能改变了按钮的名称,并且设置了点击事件,点击后文本的内容也改变了。上面的 binding 已经和片段内容绑定了,直接使用binding.choiceButton 选择按钮控件,choiceButton 是按钮的 id。

效果如下:

预览图片

————————————————
原文链接:https://blog.csdn.net/weixin_44613063/article/details/103553014

发表评论

邮箱地址不会被公开。 必填项已用*标注