【Android】ViewBinding+DataBinding+MVVM新手快速上手

2023-11-10

为什么写这篇博客

网上大部分博客,代码量都比较大,把实际的业务都代入进去了

这篇博客的目的,就是为了讲解基本原理和使用思路,然后给出一个最简单的Demo

这里不讲解具体用法,那样篇幅会太长,直接看Demo代码就行

什么是ViewBinding

ViewBinding是一项根据布局文件自动生成所有控件对象的技术,类似于ButterKnife

使用ViewBinding,需要在gradle脚本中开启ViewBinding特性,编译时会自动生成Layout对应的Binding对象

什么是DataBinding

DataBinding是一项将控件内容与对象数值进行绑定的技术

当控件内容发生改变时,对象数值自动改变

当对象数值发生改变时,控件内容也自动改变

android中的DataBinding,主要是通过ViewModel和LiveData这两项技术来实现的

使用ViewBinding,需要在gradle脚本中开启DataBinding特性,这样才能使用ViewModel相关功能

什么是ViewModel和LiveData

ViewModel是一个特殊的数值容器,它可以与布局中的控件进行双向绑定,从而实现数值自动同步

ViewModel的生命周期与Activity或Fragment进行绑定,能够自动销毁

LiveData也是一个特殊的数值容器,它可以对数值变化进行监听,从而实现响应式编程特性

ViewModel和LiveData使用方法

定义ViewModel,其中的数值通过LiveData包装

在xml中,通过layout标签+data标签+变量表达式的方式,来让控件与ViewModel中的值绑定

在Activity中创建ViewModel

在Activity中为ViewModel中的LiveData添加数值监听

在Activity中为ViewModel设置初始值

将ViewModel与Binding绑定

布局内容发生变化时,LiveData会自动更新

手动修改LiveData时,需要通过setValue或postValue来通知订阅者

如何通过ViewModel和LiveData实现MVVM架构

创建ViewModel,将布局文件中需要绑定的属性添加到其中

在ViewModel中创建DataRepository,用于获取和处理数据,这个类就是负责model层工作

在Activity中,通过ViewModel订阅DataRepository处理结果,处理结果可以通过LiveData或RxJava来订阅

源码

ViewBinding+DataBinding+MVVM.zip

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Android】ViewBinding+DataBinding+MVVM新手快速上手 的相关文章

随机推荐

  • 图像分类篇——AlexNet详解

    一 概述 AlexNet是由2012年ImageNet竞赛参赛者Hinton和他的学生Alex Krizhevsky设计的 AlexNet在当年赢得了ImageNet图像分类竞赛的冠军 使得CNN成为图像分类问题的核心算法模型 同时引发了神
  • vue3 excel 导出功能

    1 安装 xlsx 库 npm install xlsx 2 创建导出函数 src utils excelUtils js import as XLSX from xlsx const exportToExcel fileName data
  • 使用AF(三)

    HIHTTPRequestManager h import
  • 卷积神经网络在自然语言处理的应用

    http www csdn net article 2015 11 11 2826192 发 自然语言处理 神经网络 卷积神经网络 图像处理 CNN NLP allowtransparency true frameborder 0 scro
  • [论文阅读] (22)图神经网络及认知推理总结和普及-清华唐杰老师

    娜璋带你读论文 系列主要是督促自己阅读优秀论文及听取学术讲座 并分享给大家 希望您喜欢 由于作者的英文水平和学术能力不高 需要不断提升 所以还请大家批评指正 非常欢迎大家给我留言评论 学术路上期待与您前行 加油 前一篇从个人角度介绍S P2
  • 什么是操作系统的微内核

    文章目录 1 CPU运行的内核模式和用户模式 2 什么是微内核 3 微内核架构 4 微内核的优势 传送门 gt gt AutoSAR实战系列300讲 糖果Autosar 总目录 操作系统用来管理系统资源的 而内核是操作系统的核心部分 它还充
  • mac笔记--csshX failed--compilation aborted at /usr/local/bin/csshX line 1130

    mac笔记 csshX failed compilation aborted at usr local bin csshX line 1130 介绍 操作 说明 介绍 笔者最近将 mac 升级到最新版本 Big Sur 导致 csshX 无
  • SpringBoot执行定时任务

    SpringBoot执行定时任务 1 在启动类中加入 EnableScheduling来开启定时任务 package com example demo import org springframework boot SpringApplic
  • userdel: user xxx is currently used by process xxx 已解决

    第一种方法 说明有进程正在使用这个用户 就是以该用户的身份运行 把对应的进程杀了再删 ps u username awk print 1 grep vi pid xargs kill 9 deluser username 另一种方法 use
  • 逻辑回归,决策树,SVM,随机森林,GBDT,Xgboost,lightGBM的评分效果观察

    https blog csdn net weixin 41710583 article details 85016622
  • 面向对象-- 属性查找顺序以及绑定方法

    面向对象编程思想的本质就是将数据和功能绑定在一起 对象本质是容器 其将数据和功能整合在一起 所以在Python中 一切皆对象 对象 数据与功能的结合体 类 种类 相当于诸多对象共有的特征 数据 功能 类只描述对象公共的特征 不同的特征由对象
  • 【蚁群算法栅格图路径规划python】

    蚁群算法栅格图路径规划python 简单说几句 python代码 0 预安装库 1 调用模版 2 地图文件 3 栅格图 迭代图 3 ACO类 简单说几句 简单说几句 算法的基本逻辑请看其他文章 很多 不介绍 本文旨在提供一份python代码
  • WSL 错误 System has not been booted with systemd as init system (PID 1). Can‘t operate

    描述 项目 描述 操作系统 Windows 10 专业版 版本 WSL 2 前情 在 适用与 Linux 的 Windows 的子系统 WSL 默认情况下是无法使用 systemctl 命令 使用该命令 WSL 将抛出如下错误 System
  • pyinstaller打包exe文件

    pyinstaller是一个python第三方库 可以安装 用于打包py脚本文件成exe可执行程序给其他人使用 而不是需要python解释器执行py脚本 指令如下 pyinstaller F w py文件目录 F是只生成一个EXE文件 w是
  • 文字滚动

    不用JavaScript 不开定时器也可以实现文字滚动的效果 仅仅需要用一对
  • java 异常就是出错?快醒醒吧

    1 异常是什么 首先异常 Exception 和错误 Error 并不能划等号 顾名思义 它只是程序运行出现了不正常的情况 2 异常的家族 从图中我们可以看出Error和Exception属于一个家族的两兄弟 Exception中又分为两类
  • 关于RedisTemplate和StringRedisTemplate

    最近在开始在学习Redis以及如何在Java当中去使用Redis Redis是什么我这里就不说了 我主要想说的是Redis和Java当中Spring结合起来的时候 使用到的RedisTemplate和StringRedisTemplate
  • pycharm读取图片

    把图片整体存入数据库 encoding utf 8 import pymysql conn pymysql connect host 127 0 0 1 port 3306 user root passwd root db test sql
  • JS 取出某数组前n位的数据

    别再用 for 循环了 用 splice arr arr splice 0 n
  • 【Android】ViewBinding+DataBinding+MVVM新手快速上手

    为什么写这篇博客 网上大部分博客 代码量都比较大 把实际的业务都代入进去了 这篇博客的目的 就是为了讲解基本原理和使用思路 然后给出一个最简单的Demo 这里不讲解具体用法 那样篇幅会太长 直接看Demo代码就行 什么是ViewBindin