MVVM的最大缺点貌似是,报错后不好找,
在安卓6.0的时候出现了一个工具叫做databinding,其中呢主要是用来帮助实现MVVM模式的快速开发
 
在使用databinding的时候我们需要做的工作有一下几点:
(仅支持studio,eclipse想使用MVVM手写去吧)
在使用databinding的时候我们需要做的工作有一下几点:
(仅支持studio,eclipse想使用MVVM手写去吧)
首先要下载需要的包
1.在SDKMannager中下载

 
2.配置支持包
第一种方式:在整个项目中的build.gradle配置(2.0 之前的 Android Studio)
依赖 DataBinder 这个库

dependencies {
    classpath 'com.android.tools.build:gradle:2.2.0'
    classpath 'com.android.databinding:dataBinder:1.0-rc0'//加入这句话
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
 
 
然后再在使用的 module中最上边(文件) 配置
apply plugin: 'com.android.databinding'
-------------------------------------华丽的分割线---------------------------------------
经测试,这种本人测试失败,报错如下,不知道是否是跟版本有关系,我的猜测来自下边知乎网友的回答
重点报错:如果是2.0之后的studio使用的以上的配置
原因分析:
知乎用户 Android/C++/Lua/Python/杂七杂八
于 2015.12.15 更新:
最近 Android Studio 升级到了 2.0 版本,发现不需要从 jcenter 中再依赖 DataBinder 这个库了,2.0 之后的 Android Studio 版本内置就支持了 DataBiding,也不需要在 build.gradle 中添加 com.android.databinding 这个 Plugin 了。使用方式如下:
1、在 Project 的 build.gradle 配置中,使用 1.5.0 以上的 Gradle 版本;
2、在使用 DataBinding 的 Module 中,如下配置:

android {
    ....
    dataBinding {
        enabled = true
    }}
详细信息请关注官方开发者论坛,里面会随时更新:
------------------------华丽的分割线---------------------------------------
 
第二种:在module中配置(推荐studio 2.0以后的使用这种)
在需要使用的module中android下配置
dataBinding{
    enabled=true
}
 
 
 
使用方式如下:
布局文件:
main布局文件
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:bind="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools">
<!--当前数据来源-->
<data>
<!--variable变量这里的数据由ActivityMainBinding的setXXX传入的
name相当于是在这个xml文件中使用时候的对象名也是new出后的对象名,
这里的name与ActivityMainBinding的setXXX中使用的是相同的,相当于接收参数的对象名
type指的是什么样的类型对象,相当于用来接收参数类型-->
<variable
name="user"
type="com.example.lizhanqi.mvvmdemo.bean.User" />

</data>
<!--往下是正常的布局-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<!--引用时候的不同点:这里设置text与以往不同android:text="@{bean.phone}"
这里{}中的bean来自上边定义的数据对象名称
-->
<TextView

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.name}" />
<!--引用布局,其中需要传入数据
bind:myuser="@{user}
bind是文件头部自定义的命名空间
myuser是引用布局的对象,
@{user} 是传入的数据对象
-->
<include
layout="@layout/my_layout"
bind:myuser="@{user}" />
<!--他妈蛋的MVVM就是个垃圾货色,没必要研究了addTextChangedListener使用不了报错,
设置控件的显示也完蛋报错,android:visibility="@{user.isshow ? View.VISIBLE : View.GONE}"
教程没问题,偏偏我这里就不行,MVVM据说还他妈的是后期报错维护难,
果断舍弃,浪费生命

-->
<!-- <EditText
android:addTextChangedListener="@{user.address}"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.address}" />-->
</LinearLayout>
</layout>

 
===========华丽的分割线========================
引用的布局文件my_layout的布局文件
 
    <!--这里与平时用法基本相同-->

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!--当前数据来源-->
<data>
<!--variable变量,这里的数据是由引用者传入数据
name相当于是在这个xml文件中使用时候的对象名也是new出后的对象名,
这里的name与ActivityMainBinding的setXXX中使用的是相同的,相当于接收参数的对象名
type指的是什么样的类型对象,相当于用来接收参数类型-->
<variable
name="myuser"
type="com.example.lizhanqi.mvvmdemo.bean.User"/>
</data>
<!--往下是正常的布局-->
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!--引用时候的不同点:这里设置text与以往不同android:text="@{bean.phone}"
这里{}中的bean来自上边定义的数据对象名称
-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{myuser.sex}" />
</LinearLayout>
</layout>

 
------==============华丽的分割线=====================------------
activity的java中
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

import com.example.lizhanqi.mvvmdemo.bean.User;
import com.example.lizhanqi.mvvmdemo.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置界面 设置界面不在使用activity提供的,
        //setContentView(R.layout.activity_main);
        //使用的是 DataBindingUtil的setContentView(Activity activity, int layoutId) ;
        //返回使用的是ActivityMainBinding不是提醒器的ViewDataBinding
        ActivityMainBinding viewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);//绑定view层
        //初始化实力module
        User user = new User();
        user.setName("lizhanqi");
        user.setSex("男");
        user.setAge("21");
        //这里的setXXX是来自你定义在xml文件引用的对象名
        viewDataBinding.setUser(user);//绑定module层
    }

}
++++++++++++++++++华丽的分割线++++++++++++++++++++++++++++++++++++
javabean只是对User进行了简单的封装
public class User {
     String name;
     String sex;
     String age;
     String address;
    public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }

public String getSex() {
        return sex;
    }

public void setSex(String sex) {
        this.sex = sex;
    }

public String getAge() {
        return age;
    }

public void setAge(String age) {
        this.age = age;
    }

public String getAddress() {
        return address;
    }

public void setAddress(String address) {
        this.address = address;
    }

}
 
***************使用心得及吐槽****************************
 
 
在使用的过程中报错很多不知道原因,其中有,以及刚才上边说的,控制控件显示不顶用,获取输入字符监听无效,以及最后的R包也出现了不知名的问题,
(com.example.lizhanqi.mvvmdemo.的R包,纠结了(最后找了下分包问题,日了动物园了))
总共这点小东西报错差不多有十种了,因此如果咋项目中使用,以后有的受了
身心疲惫,学习历程没见过这么费劲的玩意,放弃了学H5去了
(效果现在不敢保证了,中间效果出来过,就两个简单的显是姓名,以及性别)
 
 

MVVM模式的更多相关文章

  1. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  2. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  3. MVVM模式解析和在WPF中的实现(三)命令绑定

    MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  4. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  5. MVVM模式和在WPF中的实现(一)MVVM模式简介

    MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...

  6. [转载]MVVM模式原理分析及实践

    没有找到很好的MVVM模式介绍文章,简单找了一篇,分享一下.MVVM实现了UI\UE设计师(Expression Blend 4设计界面)和软件工程师的合理分工,在SilverLight.WPF.Wi ...

  7. dynamic-css 动态 CSS 库,使得你可以借助 MVVM 模式动态生成和更新 css,从 js 事件和 css 选择器的苦海中脱离出来

    dynamic-css 使得你可以借助 MVVM 模式动态生成和更新 css,从而将本插件到来之前,打散.嵌套在 js 中的修改样式的代码剥离出来.比如你要做元素跟随鼠标移动,或者根据滚动条位置的变化 ...

  8. mvc mvp mvvm模式的区别

    mvc模式中,Model不依赖于View,但是View是依赖于Model的,m和v没有进行完全的分离,三者之间是单向的操作 mvp模式中,m和v之间的交互是双向的,m和v完全分离,m和v的交互是通过P ...

  9. 转:界面之下:还原真实的 MVC、MVP、MVVM 模式

    前言 做客户端开发.前端开发对MVC.MVP.MVVM这些名词不了解也应该大致听过,都是为了解决图形界面应用程序复杂性管理问题而产生的应用架构模式.网上很多文章关于这方面的讨论比较杂乱,各种MV*模式 ...

  10. 由项目浅谈JS中MVVM模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.    背景 最近项目原因使用了durandal.js和knock ...

随机推荐

  1. [转载]iOS开发:获取设备信息

    开发iOS平台的应用的时候,可以获取iOS设备的设备信息,包括设备的名称,设备的机型,设备的iOS版本等等.设备信息主要来自 UIDevice 类. UIDevice *currentDevice = ...

  2. 利用java Base64 实现加密、解密

    Base64加密解密 package com.stone.util; import java.io.UnsupportedEncodingException; import sun.misc.*; p ...

  3. (二)原生JS实现 - 事件类方法

    事件处理 - 添加事件 var addEventHandler = function (oTarget, sEventType, fnHandler) { if (oTarget.addEventLi ...

  4. PHP数组foreach后使用current取值的问题

    先看如下的代码 $arr=['a','b','c']; foreach ($arr as $v){ echo $v.'<br>'; } var_dump(current($arr)); 今 ...

  5. 判断display为隐藏还是显示及获取css

    <html lang="en"> <head> <title>判断display为隐藏还是显示及获取css</title> < ...

  6. [0] Tornado Todo 开篇

    参考自: python: tornado例子 Github地址:tornado_todo 开发环境: Python包的安装: 首先安装 pip: sudo apt-get install python ...

  7. 1169 二叉树遍历(XCOJ DFS)

    给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 样例输入 BADC BDCA 样例输出 ABCD #include <iostream> ...

  8. 【好程序员笔记分享】——iOS开发之纯代码键盘退出

    -iOS培训,iOS学习-------型技术博客.期待与您交流!------------ iOS开发之纯代码键盘退出(非常简单)     iOS开发之纯代码键盘退出 前面说到了好几次关于键盘退出的,但 ...

  9. Scala学习笔记--函数式编程

    一.定义 简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论. 它属于"结构化编程&qu ...

  10. Unity3D TouchScript 插件教程一

    只是个人学习小记,谈不上教程,但是为了命中搜索引擎关键词,只好装逼了:),可能对于大家来说太简单了吧,网上中文教程没搜到 ,只好自己摸索了. 插件资源下载地址:https://www.assetsto ...