19人参与 • 2025-06-19 • Android
定义:databinding 是 android jetpack 的官方库,允许在布局文件中直接绑定 ui 组件到数据源,减少模板代码并实现自动更新。
核心优势:
消除 findviewbyid()
调用
自动 ui 更新(数据变化 → ui 刷新)
支持双向绑定(ui 变化 → 数据更新)
布局表达式支持逻辑运算
与 mvvm 架构完美契合
android { buildfeatures { databinding = true } }
<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>
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 } }
[view] ---(观察)---> [viewmodel] <---(管理)---> [model] ↑ | └──(databinding绑定)──┘
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) } }
<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()}" /> <!-- 绑定点击事件 -->
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 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论