在这里我们要使用其支持库Data Binding来实现mvvm架构

model-view-viewmodel 三个部分

1.配置model(app) 的build.gradle

android {
....
     dataBinding {
        enabled = true
    }
}

2.先创建三个部分之一model,存放数据

public class Swordsman  {private String name;private String level;public String getLevel() {return level;}public Swordsman(String level, String name) {this.level = level;this.name = name;}public void setLevel(String level) {this.level = level;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

3.再创建三个部分之一view,布局文件

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"><data><import type="com.example.liuyan.testmvvm.test.Swordsman" alias="otherswordsman"/> <!--如果多个包名相同,可以用别名--><import type="com.example.liuyan.testmvvm.Swordsman"/><import type="java.util.ArrayList"/> <!--java.util中的引用数据变量定义,要import--><import type="java.util.Map"/><variablename="otherswordsman1"type="otherswordsman"/> <!--变量实体类的位置--> <!--别名--> <!--binding.setotherswordsman1(otherswordsman);--><variablename="swordsman"type="Swordsman"/><variablename="name"type="String"/> <!--binding.setname(String)--> <!--java.lang的基本类型数据变量定义,不需要import--><variablename="age"type="int"/><variablename="man"type="boolean"/><variablename="list"type="ArrayList<String>"/> <!--定义集合变量,需要import--> <!--会爆红,但不用管--><variablename="map"type="Map<String,String>"/><variablename="arrays"type="String[]"/></data><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{swordsman.name}"/> <!--和实体类的属性值绑定--><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{swordsman.level}"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{name}"/> <!--变量定义赋值--><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(age)}"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(man)}"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{list.get(1)}"/> <!--变量定义赋值--><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text='@{map["age"]}'/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{arrays[1]}"/></LinearLayout>
</layout>

4.在activity中得到三个部分之一view_model

根据activity_main.xml 生成ActivityMainBinding(如布局为my_buju,则view_model为 MyBujuBinding)

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);//binding就是viewmodel (mvvm=model-view-viewmodel)ActivityMainBinding binding = DataBindingUtil.setContentView(this , R.layout.activity_main);Swordsman swordsman = new Swordsman("张无忌" , "sss");binding.setSwordsman(swordsman); //给布局中的控件传值binding.setName("风清扬");binding.setAge(30);binding.setMan(true);ArrayList list = new ArrayList();list.add("0");list.add("1");binding.setList(list);Map map = new HashMap();map.put("age" , "30");binding.setMap(map);String[] arrays = {"张无忌" , "慕容龙城"};binding.setArrays(arrays);}
}

5.此外还有数据的动态更新(model变化,view要跟着变化),要设置model的set和get方法

6.还有数据库的双向绑定(view变化,model变化),要设置view中的控件传值方式

在edittext中
android:text="@={swordsman.level}"
这样edittext中变化,对应的model数据也变化

MVVM架构简单介绍相关推荐

  1. 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍

    将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...

  2. 公司网络架构简单介绍

    公司网络架构简单介绍 公司服务器架构简单介绍: CDN:租用的,用于提高用户访问速度 前边两台LVS:实现负载均衡和高可用 三台Nginx服务器提供Web服务 三台Tomcat服务器当动态Web服务 ...

  3. 3种应用架构简单介绍

    1.单一架构:将所有的应用(业务)放到一台服务器上运行,如公司管理系统/超市收银系统. 2.垂直应用架构 将大应用拆分成为多个小应用(一般按照业务拆分),根据不同的访问频 率决定各自业务部署的服务器数 ...

  4. Web服务器架构简单介绍

    服务器开发的流程图 服务器架构的设计思路 服务器设计思路

  5. Hive代码组织及架构简单介绍

    2019独角兽企业重金招聘Python工程师标准>>> hive三个主要组件 Serialzers/Deserialzers(trunk/serde)     此组件允许用户自己开发 ...

  6. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  7. WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code)

    WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code) 原文:WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GL ...

  8. Apollo架构体系、Apollo运行原理、Apollo配置中心简单介绍(一)

    笔者在工作中遇到如下问题,随着程序功能越多,配置文件不断增加,一些功能的开关.服务器地址.接口地址.不同环境的一些配置文件不同,这些在每次发布不同环境.更新项目时都比较繁琐,后来学习微服务时接触到了S ...

  9. android数据流分类,【Android工程之类】1 MVVM架构 - MVVM与单向数据流

    前言 这个系列将讲述使用MVVM架构.LiveData.Room.Kodein.Retrofit.EventBus来建立一个统一的.优雅的.可维护的TODO程序,本系列分为多个章节,从0开始一步一步引 ...

最新文章

  1. DefaultHashOperations multiget的一个坑
  2. linux命令:case选择结构语句
  3. linux块设备驱动(一)——块设备概念介绍
  4. layer 弹出层 回调函数调用 弹出层页面 函数
  5. 42.从非托管磁盘创建虚拟机
  6. 深入剖析Android音频(四)AudioTrack
  7. Spark机器学习(12):神经网络算法
  8. Hello designer|PPT笔记
  9. python题目-奇偶数调用函数
  10. Oracle函数之listagg函数
  11. Drools——什么是规则
  12. TopCoder SRM(Arena) 一日游记
  13. 用计算机算出身高,身高预测公式计算器靠谱吗
  14. 京东后台->京东商智uuid算法
  15. openwrt 挂载硬盘NFS共享,非SMB共享
  16. zabbix报错排错大全
  17. 绘图与滤镜全面解析--Quartz 2D 、Core Image
  18. 你可以把Linux内核当成一家软件外包公司的老板
  19. 《尚硅谷30天入门Java》学习笔记1
  20. Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed.

热门文章

  1. 塔防小游戏的开发设计
  2. 程序员的台式机组建之路
  3. view的生命周期(实训)
  4. [转] QQ上最牛的离线留言消息(爆笑)
  5. Tor 项目正开发加固版的 Tor 浏览器
  6. 2022年,开发独立 EXE 桌面应用程序,用什么语言、技术合适
  7. 信息学奥赛一本通|1338:【例3-3】医院设置
  8. Monit的编译(交叉编译)及使用
  9. 微型计算机原理实验报告系统认识,微机原理 实验报告——显示程序实验与8259应用编程实验...
  10. 系统架构设计笔记(64)—— 嵌入式系统设计