1.官方文档

  https://developer.android.com/topic/libraries/data-binding/architecture

2.简介

  数据绑定库 可与MVVM 架构组件无缝协作。指定一下 binding的 lifecycleOwner 就可以了。如下:

 class PageFrgmt (var number : Int) : Fragment() {

     lateinit
var binding : PageBinding
val viewModel : DataViewModel by viewModels() fun initBinding(){
binding.lifecycleOwner = this
binding.number = number
binding.data = viewModel.data
} override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = PageBinding.inflate(inflater,container,false)
initBinding()
return binding.root
}
}

3.使用数据绑定与LiveData区别

使用数据绑定时,有两种方式实现数据更新通知 :

a. 使用  ObservableInt,ObservableFloat ... ObservableField<XX> 等

  • 缺点是这系列类不知道观察者(在mvvm架构中,通常是Activity,Fragment)的生命期变化,
  • 优点是不用在代码里写观察代码,如
            viewModel.loadUser().observe(viewLifecycleOwner){user->
    nameValue.setText(user.name)
    ageValue.setText(user.age.toString())
    }
  • 在android 3.1以上,可以直接把ObservableXXX 系列类,换成LiveData系列。

b. 使用 BaseObservable 基类,这时无法替换成LiveData

4.示例

4.1 数据绑定中使用LiveData

 <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<import type="com.example.mvvm2.model.Data" />
<variable name="data" type="com.example.mvvm2.model.Data" />
<variable name="liveData" type="androidx.lifecycle.MutableLiveData&lt;Data>" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:background="#ffffff"
android:clickable="true"
android:layout_width="match_parent"
android:layout_height="match_parent"> ... <TextView
...
android:text='@{@string/liveData_format(liveData.name,liveData.count),default=@string/liveData_format}' /> </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

在Fragment中

         val data2 = Data()
data2.name = "live data" liveData.value = data2
binding.liveData = liveData

4.2 完整示例

  https://github.com/f9q/mvvm2

android MVVM(2)用数据绑定关联VM 与 V的更多相关文章

  1. android MVVM(1)用LiveData关联VM 与 V

    1.官方文档 MVVM 官方文档: https://developer.android.com/jetpack/docs/guide ViewModel 文档: https://developer.a ...

  2. Android MVVM框架RoboBinding初探

    RoboBinding是一个实现了数据绑定 Presentation Model(MVVM) 模式的Android开源框架.MVVM模式是MVC模式的重要更新,使得项目结构更加的优美,易于维护以及方便 ...

  3. 如何构建Android MVVM 应用框架

    概述 说到Android MVVM,相信大家都会想到Google 2015年推出的DataBinding框架.然而两者的概念是不一样的,不能混为一谈.MVVM是一种架构模式,而DataBinding是 ...

  4. javascript基础修炼(9)——MVVM中双向数据绑定的基本原理

    开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 一. 概述 1.1 MVVM模型 MVVM模型是前端单页面应用中非常重要的模型之一,也是Single Page Appl ...

  5. Android Data Binding(数据绑定)用户指南

    Android Data Binding(数据绑定)用户指南 http://www.jianshu.com/p/b1df61a4df77 https://github.com/LyndonChin/M ...

  6. (Android MVVM)使用Data Binding Library(2)

    复习 上一篇学到了如何在layout.xml文件中增加元素,实现数据绑定,本篇接着学习. 事件处理 在layout.xml上绑定事件有两种方法,各有千秋. 1.方法引用 2.监听绑定 1.使用方法引用 ...

  7. Android开发利器之Data Binding Compiler V2 —— 搭建Android MVVM完全体的基础

    原创声明: 该文章为原创文章,未经博主同意严禁转载. 前言: Android常用的架构有:MVC.MVP.MVVM,而MVVM是唯一一个官方提供支持组件的架构,我们可以通过Android lifecy ...

  8. android mvvm初探

    目前google的databinding library还处在rc版,其中编译器发挥了主要作用.目前也只是在android studio开发环境中支持. mvvm能够大大降低模块间的耦合度,在开发过程 ...

  9. Android编程心得-Service数据绑定初步

    在Android里,Service的数据绑定是一种重要的用法,我们知道Service与Activity一样是运行在当前应用进程的主线程里面的,他们之间交互的方式有多种,下面我来介绍一下如何使用数据绑定 ...

随机推荐

  1. Python机器学习——预测分析核心算法PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7qi1 在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措.本书从算法和Python语言实现的角度,帮助读者认识机器学习. 本书专注于两类核心的" ...

  2. 一个Java方法能使用多少个参数?

    我最近给我fork的项目QuickTheories增加了一个接口: @FunctionalInterface public interface QuadFunction<A, B, C, D, ...

  3. Qt使用MD5加密

    Qt中包含了大部分常用的功能,比如json.数据库.网络通信.串口通信以及今天说的这个MD5加密: Qt中将字符串进行MD5加密其实比较简单,代码如下: #include <QCoreAppli ...

  4. CentOS yum 安装nginx

    当使用以下命令安装Nginx时,发现无法安装成功 yum install -y nginx 需要做一点处理. 安装Nginx源 执行以下命令: rpm -ivh http://nginx.org/pa ...

  5. Linux 中文编码

  6. Java基础高级篇 NIO

    nio模型与io模型的对比 netty 是什么 怎么使用

  7. 不能错过的分布式ID生成器(Leaf ),好用的一批!

    本文收录在个人博客:www.chengxy-nds.top,技术资料共享,同进步 不了解分布式ID的同学,先行去看<一口气说出 9种 分布式ID生成方式,面试官有点懵了>温习一下基础知识, ...

  8. SPP、ASPP、RFB、CBAM

    SPP:ASPP:将pooling 改为了 空洞卷积RFB:不同大小的卷积核和空洞卷积进行组合,认为大的卷积应该有更大的感受野. CBAM:空间和通道的注意力机制 SPP: Spatial Pyram ...

  9. System.out.println()相关源码

    System.out.println是一个Java语句,一般情况下是将传递的参数,打印到控制台. System:是 java.lang包中的一个final类.根据javadoc,“java.lang. ...

  10. 恕我直言,你可能真没用过这些 IDEA 插件!

    一.前言 IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境.IntelliJ在业界被公认为最好的java开发工具. 不是我说的喔,百度百科说的... IDEA 如此好用,插 ...