如何快速的写一个MVVM出来

作者: super_shanks | 来源:发表于2017-03-08 11:14 被阅读209次

前言

上一篇我们讲了如何快速的写一个MVP去过面试关,未曾想有朋友说能否再来一个MVVM。
那贫僧就紧接着再来一发吧!

拆分

Model-View-ViewModel

  • Model
    负责数据
  • View
    负责展示
  • ViewModel
    负责将View和Model关联起来,起到一个中介的作用

废话不多说,既然速成,代码走起

我们这里依然遵从MVP速成的思维方式。使用MVP的抽象情景,不过为了更加突出ViewModel的存在意义,我们需要通过view的展示情况来反应出ViewModel的作用

那么好,情景是这样的,按钮上显示user的age,用户点击按钮,user的age+1,并且显示在按钮上。

  • View层
    activity_main.layout
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
            <data>
                <variable name="user" type="org.ding.testmulti.User"/>
            </data>
            <RelativeLayout
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/activity_main"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:paddingBottom="@dimen/activity_vertical_margin"
                android:paddingLeft="@dimen/activity_horizontal_margin"
                android:paddingRight="@dimen/activity_horizontal_margin"
                android:paddingTop="@dimen/activity_vertical_margin"
                tools:context="org.ding.testmulti.MainActivity">

                <Button
                    android:text="@{user.age}"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:id="@+id/button"
                    android:onClick="click"/>
            </RelativeLayout>
</layout>
 3步:
 * 用一个layout标签包裹原先的布局,并将原先根标签的署名挪到layout标签
 * 在layout标签内添加data标签,并包裹variable标签,属性名name表示布局文件中使用的名字,type表示类地址
 * 在需要数据的地方使用`@{class.property}`的方式来注明使用的具体数据。

* Model层
public class User {
        private int age;

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
}
* ViewModel层
由activity来充当
public class MvvmActivity extends AppCompatActivity{

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                //系统会根据你的layout文件名生成相应的Binding文件,比如说使用的activity_main,那么就生成ActivityMainBinding文件
               //DataBindingUtil是系统提供的bind工具
                ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
                final User user = new User();
                user.setAge(18);
                findViewById(R.id.bt_hello).setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int age = user.getAge();
                        user.setAge(age++);
                    }
                });
        }
}

其实到以上为止已经速成完毕

MVVM略微比MVP简单一点,主要就是databinding这个东西,只要在布局文件中处理好了,并掌握系统为我们生成的bind工具的使用方法速成就没有什么问题了。

由于是代码速成,故而把一些环境的依赖放在这里:
project的build.gradle文件

dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath "com.android.databinding:dataBinder:1.0-rc4"
    }

module的build.gradle文件

apply plugin: 'com.android.application'
apply plugin: 'com.android.databinding'

如何快速的写一个MVP出来

相关文章

  • 如何快速的写一个MVVM出来

    前言 上一篇我们讲了如何快速的写一个MVP去过面试关,未曾想有朋友说能否再来一个MVVM。那贫僧就紧接着再来一发吧...

  • Android-Kata

    以前写过如何优雅的快速搭建MVVM项目,但MVVM至今也还是用的人少之又少,基于MVVMFramework的思想融...

  • 如何快速的写一个MVP出来

    估计很多朋友都会在android面试的时候拿到一张白纸,要你写一个简易的MVP模型出来。这里就教大家如何去速成,我...

  • iOS开发MVVM框架Demo

    今天利用空闲时间, 把项目中的MVVM实现的代码抽取出来单独写一份 利用MVVM框架实现一个tableView的显...

  • Android MVVM文章整理

    DataBinding && MVVM 如何构建Android MVVM 应用框架 玩转Android之MVVM开...

  • 一个浅封装、快速开发的 Android MVVM 开发框架

    FastAAC 上手特别容易,不会 MVVM 开发模式的都可以快速上手。 一个浅封装、快速开发的 Android ...

  • 浅谈理解MVVM

    什么是MVVM?MVVM是Model-View-ViewModel的缩写。 MVVM最早由微软提出来,它借鉴了桌面...

  • vue

    VUE学习 MVVM初体验 模板写法 javascript构建Vue实例 css可以暂时不写 渲染出来的视图

  • 基于Spring Cloud Feign组件快速构造http c

    如何用java写一个简单的http client端?或者如何用java快速高效的写一个http请求?目前我们实现方...

  • 前端面试之MVVM 和 Vue

    ++本文系慕课网学习笔记++ 如何理解 MVVM 如何实现 MVVM 是否解读过 vue 的源码(vue 中的 x...

网友评论

    本文标题:如何快速的写一个MVVM出来

    本文链接:https://www.haomeiwen.com/subject/rwxvgttx.html