Android MVVM使用文檔

項(xiàng)目依賴關(guān)系

7JY62U9%8${5$%57Y_H$WAN.png

關(guān)聯(lián)關(guān)系

1梅屉、應(yīng)用層APP也就是項(xiàng)目當(dāng)中的宿主
2、組件層則是項(xiàng)目當(dāng)中的業(yè)務(wù)組件
3鳞贷、基礎(chǔ)層是一些公共的lib包

宿主依賴業(yè)務(wù)組件

dependencies {
   //宿主項(xiàng)目中判斷組件是否需要獨(dú)立運(yùn)行
    if (isBuildModule.toBoolean()) {
        //組件獨(dú)立運(yùn)行時(shí)坯汤,宿主項(xiàng)目直接依賴基礎(chǔ)庫(kù),避免編譯錯(cuò)誤
        implementation project(':library-base')
    } else {
        //主業(yè)務(wù)模塊
        implementation project(':module-main')
        //登錄模塊
        implementation project(':module-sign')
        //首頁(yè)模塊
        implementation project(':module-home')
        //用戶模塊
        implementation project(':module-user')
        //我的模塊
        implementation project(':module-mine')
    }
}

業(yè)務(wù)組件依賴library-base

dependencies {
   //組件依賴基礎(chǔ)庫(kù)
    api project(':library-base')
    //組件中依賴阿里路由編譯框架
    annotationProcessor rootProject.ext.dependencies["arouter_compiler"]
    //按需依賴第三方組件
}

library-base依賴公共庫(kù)

dependencies {
    //公用的support相關(guān)庫(kù)在base中依賴
    api rootProject.ext.support["design"]
    api rootProject.ext.support["appcompat-v7"]
    api rootProject.ext.support["constraint-layout"]
    api rootProject.ext.support["recyclerview-v7"]
    //公用資源在base中依賴
    api project(':library-soure')
    api project(':network_processor')
    api project(':library-dialog')
    api project(':third-party-pay-login-share')
    //核心基礎(chǔ)庫(kù)(由于這是例子, 所以這里采用遠(yuǎn)程依賴的方式, 可根據(jù)實(shí)際情況自行換成源碼依賴搀愧,源碼地址:https://github.com/goldze/MVVMHabit)
    api rootProject.ext.dependencies["MVVMHabit"]
    //阿里路由框架
    api rootProject.ext.dependencies["arouter_api"]
    api rootProject.ext.dependencies["lifecycle-extensions"]
    api rootProject.ext.dependencies["lifecycle-compiler"]
    api rootProject.ext.dependencies["immersionbar"]
    api rootProject.ext.dependencies["alibabajson"]
    api rootProject.ext.dependencies["xxpermissions"]
    api rootProject.ext.dependencies["wechat"]
    //其他公共庫(kù)惰聂,例如圖片選擇、分享咱筛、推送等
}

開(kāi)啟dataBinding

Android MVVM模式離不開(kāi)DataBinding搓幌,每個(gè)組件中都需要開(kāi)啟,包括宿主App

android {
    //開(kāi)啟DataBinding
    dataBinding {
        enabled true
    }
}

manifest配置

1迅箩、組件在自己的AndroidManifest.xml各自配置activity溉愁,application標(biāo)簽無(wú)需添加屬性,也不需要指定activity的intent-filter饲趋。當(dāng)合并打包時(shí)拐揭,gradle會(huì)將每個(gè)組件的AndroidManifest合并到宿主App中。
組件關(guān)聯(lián)到宿主時(shí)AndroidManifest.xml示例:
當(dāng)我們程序的程序需要跳轉(zhuǎn)到組件module-main里面的MainActivity時(shí)奕塑,就在組件module-main的AndroidManifest.xml里面聲明

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.szy.pinhole.main">

    <application>
        <!--在自己組件中注冊(cè)Activity-->
        <activity
            android:name=".activity.MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:exported="true"
            android:launchMode="singleTask"
            android:screenOrientation="portrait" />
        <service
            android:name=".service.ReportRecordDataService"
            android:enabled="true"
            android:exported="false" />
    </application>
</manifest>

2堂污、組件獨(dú)立運(yùn)行時(shí),就需要單獨(dú)的一個(gè)AndroidManifest.xml作為調(diào)試用爵川》笱唬可以在src/main文件夾下創(chuàng)建一個(gè)alone/AndroidManifest.xml。配置application標(biāo)簽屬性,并指定啟動(dòng)的activity扒披。這個(gè)跟宿主APP的AndroidManifest.xml配置結(jié)構(gòu)是一樣的

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.goldze.main">
    <application
        ...
        >
        <activity 
            ...
            >
            <intent-filter>
                ...
            </intent-filter>
        </activity>
    </application>
</manifest>

build.gradle中配置

android {
    sourceSets {
        main {
            ...
            if (isBuildModule.toBoolean()) {
                //獨(dú)立運(yùn)行
                manifest.srcFile 'src/main/alone/AndroidManifest.xml'
            } else {
                //合并到宿主
                manifest.srcFile 'src/main/AndroidManifest.xml'
                resources {
                    //正式版本時(shí)值依,排除alone文件夾下所有調(diào)試文件
                    exclude 'src/main/alone/*'
                }
            }
        }
    }
}

Activity之間跳轉(zhuǎn)與傳值

1、在activity里面添加注解@Route(path = RouterActivityPath.Scan.PAGER_SCAN_WIFI_RESULT)
2碟案、通過(guò)阿里的ARouter調(diào)用執(zhí)行RouterActivityPath.Scan.PAGER_SCAN_WIFI_RESULT
//示例代碼:

ARouter.getInstance().build(RouterActivityPath.Scan.PAGER_SCAN_WIFI_RESULT)
                    .withParcelableArrayList("ipList", ipList).navigation();

Activity接收傳值

1愿险、需要再onCreate方法添加
 ARouter.getInstance().inject(this);
2、通過(guò)聲明獲取屬性即可獲取到值
@Autowired(name = "ipList")
ArrayList<ScanDeviceEntity> ipList;

ARouter傳遞一個(gè)int類型的id价说,String類型同理

ARouter.getInstance().build(RouterActivityPath.Strategy.PAGER_ARTICLE_ACTIVITY)
                                .withInt("id", videoEntity.getId()).navigation();

Activity接收一個(gè)int類型的id值辆亏,String類型同理

1、需要再接收值的Activity里面的onCreate方法添加
ARouter.getInstance().inject(this);

@Autowired()
int id;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鳖目,一起剝皮案震驚了整個(gè)濱河市扮叨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌领迈,老刑警劉巖彻磁,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異狸捅,居然都是意外死亡衷蜓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門尘喝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)磁浇,“玉大人,你說(shuō)我怎么就攤上這事朽褪≈孟牛” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鞍匾,是天一觀的道長(zhǎng)交洗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)橡淑,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任咆爽,我火速辦了婚禮梁棠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斗埂。我一直安慰自己符糊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布呛凶。 她就那樣靜靜地躺著男娄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上模闲,一...
    開(kāi)封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天建瘫,我揣著相機(jī)與錄音,去河邊找鬼尸折。 笑死啰脚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的实夹。 我是一名探鬼主播橄浓,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亮航!你這毒婦竟也來(lái)了荸实?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤缴淋,失蹤者是張志新(化名)和其女友劉穎泪勒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宴猾,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡圆存,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仇哆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沦辙。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖讹剔,靈堂內(nèi)的尸體忽然破棺而出油讯,到底是詐尸還是另有隱情,我是刑警寧澤延欠,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布陌兑,位于F島的核電站,受9級(jí)特大地震影響由捎,放射性物質(zhì)發(fā)生泄漏兔综。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一狞玛、第九天 我趴在偏房一處隱蔽的房頂上張望软驰。 院中可真熱鬧,春花似錦心肪、人聲如沸锭亏。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)慧瘤。三九已至戴已,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锅减,已是汗流浹背糖儡。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留上煤,地道東北人休玩。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像劫狠,于是被迫代替她去往敵國(guó)和親拴疤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容