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. Android SDK离线安装

    Android SDK离线安装是本文要介绍的内容,主要是来了解并学习Android SDK安装的内容,具体关于Android SDK是如何离线安装的内容来看本文详解. Android开发环境,完整的说 ...

  2. 无法显示TabHost的setIndicator设置的图片的问题解决办法

    本想做一个 带有图片的 分页显示的demo 但是 自己的代码写的也木有问题 ,所以只有mainifest 有问题了 主要是用到了  Tabhost <TabHost xmlns:android= ...

  3. C#中的表达式树的浅解

    表达式树可以说是Linq的核心之一,为什么是Linq的核心之一呢?因为表达式树使得c#不再是仅仅能编译成IL,我们可以通过c#生成一个表达式树,将结果作为一个中间格式,在将其转换成目标平台上的本机语言 ...

  4. hdu2588 gcd 欧拉函数

    GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  5. include 和 require 的区别

    1. 首先不去介绍大家都知道的区别,百度上都进行了详细的说明,对于返回值的方面大家都很少提到. include 和 require 还有一个区别就是是否具有返回值.参见手册 对include 加载文件 ...

  6. The Love-Letter Mystery

    def numOperations(testStr): num = 0 n = len(testStr) for i in range(n / 2): num += abs(ord(testStr[i ...

  7. 使用 OpenWrt Image Generator 为 WR703N 路由器定制固件

    标题:使用 OpenWrt Image Generator 为 WR703N 路由器定制固件 之前试着自己编译固件,编译是成功了,但是在后期安装官方仓库的ipk时出现问题,因为自己编译的固件和官方固件 ...

  8. 利用Azure Redis Cache构建百万量级缓存读写

    Redis是一个非常流行的基于内存的,低延迟,高吞吐量的key/value数据存储,被广泛用于数据库缓存,session的管理,热数据高速访问,甚至作为数据库方式提高应用程序可扩展性,吞吐量,和实施处 ...

  9. MySQL查看当前连接数、连接数和最大连接数

    MySQL查看当前所有连接的详细资料: mysqladmin -u root -p processlist MySQL查看当前连接数(Threads为连接数) mysqladmin -u root - ...

  10. C语言实现的OOP

    我倒不是为了OOP而OOP,实在是OOP的一些特征,例如封装,多态其实是软件工程思想,这些思想不分语言,遵循了这些思想可以使得程序更有弹性,更易修改和维护,避免僵化,脆弱 shape.h 该文件定义的 ...