Android DataBinding 与 MVVM使用详解

2025-06-19 16:50

本文主要是介绍Android DataBinding 与 MVVM使用详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV...

一、DataBinding 核心概念

定义:DataBinding 是 android Jetpack 的官方库,允许在布局文件中直接绑定 UI 组件到数据源,减少模板代码并实现自动更新。

核心优势

  • 消除 findViewById() 调用

  • 自动 UI 更新(数据变化 → UI 刷新)

  • 支持双向绑定(UI 变化 → 数据更新)

  • 布局表达式支持逻辑运算

  • 与 MVVM 架构完美契合

二、配置与基础使用

1. 启用 DataBinding 

android {
    buildFeatures {
        dataBinding = true
    }
}

2. 基础布局绑定 (activity_main.xml)

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable 
            name="user" 
            type="com.example.User" />
    </data>
    <LinearLayout>
        <TextView
            android:text="@{user.name}"  <!-- 单向绑定 -->
            androijsd:visibility="@{user.isAdult ? View.VISIBLE : View.GONE}"/>
        <EditText
            android:text="@={user.email}" />  <!-- 双向绑定 -->
    </LinearLayout>
</layout>

3. 在 Activity/Fragment 中绑定

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 数据绑定初始化
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        // 设置数据对象
        binding.user = User("John", "john@example.com", true)
        // 设置生命周期所有者(用于LiveData)
        binding.lifecycleOwner = this
    }
}

三、MVVM 模式集成 DataBinding

MVVM 架构图

[View] ---(观察)---> [ViewModel] <---(管理)---> [Model]
   ↑                      |
   └──(DataBinding绑定)──┘

1. 创建 ViewModel

class UserViewModel : ViewModel() {
    // 使用 LiveData 实现数据观察
    private val _user = MutableLiveData<User>()
    val user: LiveData<User> = _user
    // 双向绑定的可观察字段
    val inputText = ObservableField<String>("")
    init {
        _user.value = User("Alice", "alice@dChina编程omain.com", true)
    }
    // 处理 UI 事件
    fun updateUser() {
        _user.value = User(inputText.get() ?: "", "", true)
    }
}

2. 更新布局绑定

<data>
    <variable 
        name="viewModel" 
        type="copythonm.example.UserViewModel" />
</data>
<TextView
    android:text="@{viewModel.user.name}" />
<EditText
    android:text="@={viewModel.inputText}" />  <!-- 双向绑定到ViewModel -->
<Button
    android:onClick="@{() -> viewModel.updateUser()}" />  <!-- 绑定点击事件 -->

3. Activity/Fragment 集成

class MainActivity : AppCompatActivity() {
    private val viewModel: UserViewModel by viewModels()
    override fun onCreate(savedInstanceState: B编程China编程undle?) {
        val binding: ActivityMainBinding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        // 绑定 ViewModel
        binding.viewModel = viewModel
        // 设置生命周http://www.chinasem.cn期所有者
        binding.lifecycleOwner = this
    }
}

到此这篇关于Android DataBinding 与 MVVM 的文章就介绍到这了,更多相关Android DataBinding 与 MVVM 内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Android DataBinding 与 MVVM使用详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1155130

相关文章

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的