一、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}" <!-- 单向绑定 --> android: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@domain.com", true) } // 处理 ui 事件 fun updateuser() { _user.value = user(inputtext.get() ?: "", "", true) } }
2. 更新布局绑定
<data> <variable name="viewmodel" type="com.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: bundle?) { val binding: activitymainbinding = databindingutil.setcontentview(this, r.layout.activity_main) // 绑定 viewmodel binding.viewmodel = viewmodel // 设置生命周期所有者 binding.lifecycleowner = this } }
到此这篇关于android databinding 与 mvvm 的文章就介绍到这了,更多相关android databinding 与 mvvm 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论