MVVM技术 - 的实现 @{}来进行 调用那个 DataBinding方法

new Material Design 支持哭

还有 Data Binding 结束

使用DataBindign 结束 我们很方面的实现 MVVM设计模式

什么是MVVM model 呢、

MVVM 是 Model - View - ViewModel 的简称

View 负责显示,ViewModel 跟Model 和view 进行双向绑定;当View 有用户输入后,ViewModel 通知Model 更新数据,同时处理Model 数据更新后,ViewModel 通知View更新

也就是说View的负责内容是 显示 ,ViewModel就是一个中间组件 ,它的功能是的 进行双向绑定的 。

当用户输入内容后,其实View在获取用户的数据,ViewModel通知Model更新数据,是通过View拿到的数据后,进行的操作,执行通知的作用,同时处理Model数据更新后,它还做了通知View进行更新。

所以在这个

ViewModel做了两个操作,一是及时获取View获取的数据,拿到数据后,通知Model 进行数据的更新操作,同时得到Model反馈后进行View界面的通知,通知刷新Model新数据返回的内容。

View (显示数据,发送用户 输入的 ViewModel)

ViewModel 根据用户输入处理Model ,相应Model变化事件,发送ViewModel变化时间 ,等待用户输入的 Command,通知View 进行更新

Model 被修改 ,通知ViewModel 进行更新 承训数据 Data发送数据Data变化时间

DataBingding 只在 AndroidStudio 1,3测试版本中支持,我们可以修改 Andrdoi Studio 的Update Channel 为Canary Channel 然后点击 “Check Now ”更新到最新测试版

Updates 控件,

Automatically check updates fro Canary Channel

Canary -> 翻译为 金丝雀 ,淡黄色

项目目录 :

build.gradle 中修改 dependencies --- 》 build .gradel 是 模块的 gradle 编译文件

第一步修改 ——》》》

-- 修改 build.gradle 中修改 dependencies --(翻译为:依赖性,相关性:dependencies)

dependencies{

classpath "com.android.tools.build:gradle:1.3.0 - bata2"

claspatch:"com.android.databinding:dataBinder:1.0 -rc0"

}

如果gradle 升级啦,需要修改 模块的 gradle编辑文件 build.gradle 修改为 比如数 1.3.0-beta2

第二步骤----》》》

在 App Mudule 的build.gradle 编译文件中加入databinding 支持

apply plugin: ‘com.android.application’

apply plugin:‘com.android databinding‘

然后进行等待插件下载...

使用Data Binding

View 端这边进行绑定的表达式

使用Data Binding 的Layout 与传统的稍微有点不同,我们必须使用作为最外层的布局。

Layout 中还包含一个区域,用于置顶需要绑定到这个 Layout的类

<?xml version = "1.0" encoding="utf-8">

<layout xmlns:android="http://schemes.android.com/apk/res/android">

<data>

<variable name ="user" type ="com.example.User"/>

</data>

<LinearLayout

android:orientation = "vertical"

android:layout_width="match_parent"

android:layout_height="match_parent"

<TextView android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@{user.firstName}"/>

<TextView android:layout_width ="wrap_content"

android:layout_height="wrap_content"

android:text ="@{user.lastName}"/>

</LinearLayout>

</layout>

其中Data中的variable 指定了需要绑定的类

<variable name -"user" type ="com.aswifter.databingding.model.User"/>

使用"@{}"这样的表达式,绑定类的属性

<TextView android:layout_width ="wrap_content"

android :layout_height ="wrap_content"

android:text ="@{user.firstName}"/>

@{user.firstName }它会自动调用 ViewModel中的方法getFirstName()方法。进行调用 它需要的中间件是 ActivityMainBinding中去找方法

-- 定义个类

public class user{

private final String firstName;

private final String lastName;

public User(String firstName ,String lastName){

this.firstName = firstName;

this.lastName = lastName;

}

public String getFirstName(){

return this.firstName;

}

public String getLastName(){

return this.lastName;

}

}

@{user.firstName}会访问到User类的 getFirstName()方法,这个与Web开发中模版文件访问POJO类 类视

也就是说 Web开发中 模版文件 需要访问 POJO

什么是 POJO呢 ?

什么是模版文件呢?

数据绑定

Android studio 会根据 Layout的名称自动生成一个 ViewModel类

比如 activity_main.xml会自动生成一个 ActivityMainBinding类

ActivityMainBinding中的方法,会根据layout中属性自动生成

ex,我们在layout中置顶了user变量,ActivityMainBinding类中会自动生成setUser()方法

时间: 2025-01-12 03:12:48

MVVM技术 - 的实现 @{}来进行 调用那个 DataBinding方法的相关文章

Java通过jni技术支持c、c++调用使用整理

最近在公司搞终端5.0,说要对c++版本sdk封装一个java版的sdk,可是团队没有搞java的,于是赶鸭子上架,临时学习几天,整了一下:感觉还挺有意思的,于是整理一下: 为什么要使用java支持对c.c++的调用? 众所周知Java语言是一门支持跨平台解释型语言:#.java通过javac编译生成生成#.class字节码,运行过程依赖java虚拟机执行字节码生成虚拟机的执行指令,最终通过虚拟机操控所在平台,完成其设计的功能:其优点很明显,支持跨平台:其缺点也很明显,执行效率底,并且不支持平台

转:WF工作流技术内幕 —— 通过Web服务调用Workflow工作流(开发持久化工作流)

转:http://www.cnblogs.com/carysun/archive/2009/01/11/receiveactivity.html 如果你曾经负责开发企业ERP系统或者OA系统,工作流对你来说一定并不陌生.工作流(Workflow)是对工作流程及其各操作步骤之间业务规则 的抽象.概括.描述.工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档.信息或者任务.有见及 此,微软在.NET 3.0基础上发布了WF,WCF,以及WCS(身份

WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理

原文:WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理 在前面一片文章(服务代理不能得到及时关闭会有什么后果?)中,我们谈到及时关闭服务代理(Service Proxy)在一个高并发环境下的重要意义,并阐明了其根本原因.但是,是否直接调用ICommunicationObject的Close方法将服务代理关闭就万事大吉了呢?事情远不会这么简单,这其中还会涉及关于异常处理的一些操作,这就是本篇文章需要讨论的话题. 一.异常的抛出与Close的失败 一般情况下,当服务端抛出异常,客户客户

[原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

C# 通过Get、Post、Soap调用WebService的方法

实现代码来源于网络,我只是作了一些修改! using System; using System.Web; using System.Xml; using System.Collections; using System.Net; using System.Text; using System.IO; using System.Xml.Serialization; /// <summary> /// 利用WebRequest/WebResponse进行WebService调用的类 /// <

Android--绑定服务调用服务的方法

Service按照其启动的方式,可分为两种: 1.Started Started的Service,通过在Application里用startService(Intent intent)方法来启动.这种类型的Service一经启动,会在后面无休止地运行,即使启动它的Activity被Destroy掉.要停止此类型的Service,可在Service中调用stopSelf()或在Application中调用stopService(Intent intent),要不然就只能等Android系统在系统资

Office word 2013中直接调用MathType的方法

Office word 2013中直接调用MathType的方法 | 浏览:4403 | 更新:2014-02-20 14:45 | 标签: word 使用Office word 2013的用户肯定早已注意到在编辑文档时MathType无法直接调用,但是点击文档中的公式时能够跳出MathType的公式编辑窗口.其实,这一问题可以通过简单设置让 MathType 集成到Office Word 2013中. 工具/原料 Office word 2013软件.MathType软件 方法步骤 安装Mat

struts2在配置文件中调用Action的方法返回值

struts2在配置文件中可以调用Action的方法返回值 1.Action中 //文件下载名 public String getDownloadFileName(){ String downloadFileName = ""; String filename = fileName + ".xls"; try { downloadFileName = URLEncoder.encode(filename,"UTF-8"); } catch (Un

Lua 调用 Opencv 的方法

Lua 调用 Opencv 的方法 最近想用 Lua 调用 Opencv 进行相关像素级操作,如:bitwise_and 或者 bitwise_or,从而完成图像 IoU 的计算. 那么,怎么用 Lua 调用 Opencv 呢? 查了 Torch 的官方文档,发现只有这么几个可以调用的包: 链接: https://github.com/torch/torch7/wiki/Cheatsheet 然后,你点击一个进去,发现有这么一个方法,可以安装对应的 Opencv 包:  然后,你就在终端里输入: