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. 我是键盘侠-键盘流神器Vimium

    黑客的浏览器. Vimium本着Vim的精神为导航和控制提供键盘快捷键. 注意:谷歌不允许 Vimium在 Chrome Web Store页面和 新选项卡页面上运行.所以按键无效不要惊讶 Vimiu ...

  2. Springboot 在@Configuration注解的勒种 使用@Autowired或者@value注解 读取.yml属性失败

    springboot中@value注解,读取yml属性失败 问题场景: 配置ShrioConfig时,想注入.yml的参数进行配置 解决办法: 如果注释掉shiroEhcacheManager 以下所 ...

  3. 微信公众号添加zip

    微信公众号添加zip的教程 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加 ...

  4. ArrayList继承关系分析

    目录 继承关系 Iterable Collection List AbstractCollection AbstractList RandomAccess Serializable Cloneable ...

  5. SpringCloud系列之API网关(Gateway)服务Zuul

    1.什么是API网关 API网关是所有请求的入口,承载了所有的流量,API Gateway是一个门户一样,也可以说是进入系统的唯一节点.这跟面向对象设计模式中的Facet模式很像.API Gatewa ...

  6. MyBatisPlus配置日志,CRUD的使用

    配置日志 我们所有的sql在mybatisplus是不可见的,所以在开发中需要配置日志,开发完成后,就可以取消日志了,因为日志也是损耗资源的 #配置日志 mybatis-plus: configura ...

  7. Fixing the train-test resolution discrepancy

  8. 2020-07-07:mysql如何实现跨库join查询?

    福哥答案2020-07-07: 1.同服务跨库.表名称带上库名.SELECT * FROM 数据库名称1.表名称 JOIN 数据库名称2.表名称 ON 数据库名称1.表名称.tid = 数据库名称2. ...

  9. DES算法的python3实现

    DES原理 DES原理 这里不予以复述, 有很多优秀的博客 原理可以参考这篇博客 https://www.cnblogs.com/songwenlong/p/5944139.html DES实现 1. ...

  10. NOIP真题索引

    NOIP真题索引 NOIP2019 Day 1 格雷码 括号树 树上的数 Day 2 Emiya 家今天的饭 划分 树的重心 NOIP2018 Day 1 铺设道路 货币系统 赛道修建 Day 2 旅 ...