如何快速的寫一個MVVM出來

前言

上一篇我們講了如何快速的寫一個MVP去過面試關(guān),未曾想有朋友說能否再來一個MVVM。
那貧僧就緊接著再來一發(fā)吧!

拆分

Model-View-ViewModel

  • Model
    負(fù)責(zé)數(shù)據(jù)
  • View
    負(fù)責(zé)展示
  • ViewModel
    負(fù)責(zé)將View和Model關(guān)聯(lián)起來,起到一個中介的作用

廢話不多說,既然速成,代碼走起

我們這里依然遵從MVP速成的思維方式。使用MVP的抽象情景,不過為了更加突出ViewModel的存在意義,我們需要通過view的展示情況來反應(yīng)出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標(biāo)簽包裹原先的布局,并將原先根標(biāo)簽的署名挪到layout標(biāo)簽
 * 在layout標(biāo)簽內(nèi)添加data標(biāo)簽,并包裹variable標(biāo)簽,屬性名name表示布局文件中使用的名字,type表示類地址
 * 在需要數(shù)據(jù)的地方使用`@{class.property}`的方式來注明使用的具體數(shù)據(jù)。

* Model層
public class User {
        private int age;

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
}
* ViewModel層
由activity來充當(dāng)
public class MvvmActivity extends AppCompatActivity{

        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                //系統(tǒng)會根據(jù)你的layout文件名生成相應(yīng)的Binding文件,比如說使用的activity_main,那么就生成ActivityMainBinding文件
               //DataBindingUtil是系統(tǒng)提供的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++);
                    }
                });
        }
}

其實到以上為止已經(jīng)速成完畢

MVVM略微比MVP簡單一點,主要就是databinding這個東西,只要在布局文件中處理好了,并掌握系統(tǒng)為我們生成的bind工具的使用方法速成就沒有什么問題了。

由于是代碼速成,故而把一些環(huán)境的依賴放在這里:
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出來

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • *本篇文章已授權(quán)微信公眾號 guolin_blog (郭霖)獨家發(fā)布 什么是MVVM 說到DataBinding,...
    帶心情去旅行閱讀 8,698評論 23 91
  • 沒有主題要求,對于我這個零基礎(chǔ)的人來說,其實是更大的考驗,從昨晚看到任務(wù)開始,就一直思考,我該寫點什么呢?最近比較...
    Lauriewen閱讀 232評論 0 0
  • 為什么要去說別人呢?看不慣就不去看,受不了就躲遠(yuǎn)點。 自己默默的賺錢享受就行了。 說那些都是自我安慰。
    王一晨晨閱讀 281評論 0 0
  • 1、email:電子郵箱文本框,跟普通的沒什么區(qū)別 當(dāng)輸入不是郵箱的時候,驗證通不過 移動端的鍵盤會有變化 2、t...
    fa54021d36e2閱讀 217評論 0 0

友情鏈接更多精彩內(nèi)容