Android中使用Kotlin搭建MVP

前言

從來不寫博客的我刀诬,突然也想記錄一下生活(zhuang bi)咽扇,于是有了這篇開篇博客??。如果覺得對(duì)你有幫助陕壹,請(qǐng)多多支持质欲。雖然kotlin出來有一段時(shí)間了,我也是剛正式將kotlin作為Android開發(fā)第一語言使用糠馆,所以有什么不規(guī)范的地方希望各位大佬們能指出嘶伟。本篇教程適用于有點(diǎn)基礎(chǔ)的小白。

kotlin

什么是kotlin又碌?kotlin簡而言之就是一門基于jvm的編程語言和java兼容九昧,但是比java更強(qiáng)大绊袋,而且大大減少你的代碼,提高開發(fā)效率铸鹰。

Mvp

mvp開發(fā)模式已經(jīng)不是什么新鮮的技術(shù)癌别,或者說它也不能說是一門技術(shù)。我的理解它就是讓代碼更加規(guī)范的一種編程風(fēng)格掉奄。便于管理和開發(fā)规个,最主要的作用還是用于解耦凤薛。由于本篇是教大家如何用Kotlin快速搭建一個(gè)Android項(xiàng)目姓建,所以對(duì)于一些mvp的概念和kotlin的使用不會(huì)做詳細(xì)的介紹。

目錄結(jié)構(gòu)

目錄結(jié)構(gòu).png

以上是我的分包缤苫,這是一個(gè)Demo速兔,實(shí)際項(xiàng)目還是得按具體情況具體分析。

Base基類

BaseModle

interface BaseModle {
    //TODO:modle里相關(guān)操作
}

BaseView

BaseView
interface BaseView{
    //TODO:view里相關(guān)操作
}

BasePresenter

abstract class BasePresenter<V : BaseView> {
    var view: WeakReference<V>? = null

    fun bindView(view: V) {
        this.view = WeakReference(view)
    }

    fun isBind(): Boolean {
        return view != null && view!!.get() != null
    }

    fun unBindView() {
        if (isBind()) {
            view!!.clear()
            view = null
        }
    }

    fun obtainView(): V? {
        return if (isBind()) view!!.get() else null
    }
}

其實(shí)和Java抽取mvp基類大同小異活玲,具體問題具體分析涣狗,在接口中根據(jù)實(shí)際情況定義方法。

上面實(shí)現(xiàn)了modle舒憾,view镀钓,presenter的基類,我們?cè)谑褂脮r(shí)只需繼承即可镀迂。

Example:

MainContract

interface MainContract {
    interface IView : BaseView {
        //TODO:...
    }

    interface IModle : BaseModle {
        //TODO:...
    }

    abstract class IPresenter : BasePresenter<IView>() {
        //TODO:...
    }
}

MainModle

class MainModle : MainContract.IModle {
     //TODO:...
}

MainPresenter

class MainPresenter : MainContract.IPresenter() {
    init {
        var modle: MainContract.IModle = MainModle()
        var view: MainContract.IView = obtainView()!!
    }
}

接下來就是Activity的抽取丁溅,這個(gè)只是一個(gè)示例,具體情況還需具體分析
BaseActivity

abstract class BaseActivity<V : BaseView, P : BasePresenter<V>> : AppCompatActivity() {
    var presenter: P? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(getResLayoutId())
        presenter = initPresenter()
        presenter!!.bindView(this as V)
        initView()
        initAction()
        doMoreThings()
    }

    /**其他操作**/
    abstract fun doMoreThings()

    /**獲取布局資源**/
    abstract fun getResLayoutId(): Int

    /**獲取控件**/
    abstract fun initView()

    /**設(shè)置監(jiān)聽**/
    abstract fun initAction()

    /**初始化presenter**/
    abstract fun initPresenter(): P

    /**可觸摸時(shí)執(zhí)行的操作**/
    abstract fun doOnResume()

    override fun onResume() {
        super.onResume()
        doOnResume()
    }

    override fun onDestroy() {
        super.onDestroy()
        presenter!!.unBindView()
    }
}

使用時(shí)只需繼承即可

class MainActivity : BaseActivity<MainContract.IView, MainPresenter>(), MainContract.IView {
    override fun doMoreThings() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun getResLayoutId(): Int {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun initView() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun initAction() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun initPresenter(): MainPresenter {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun doOnResume() {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

}

上面給出了Activity的一種抽取方式探遵,F(xiàn)ragment大同小異窟赏,就不給出了。

結(jié)語

至此使用Kotlin搭建一個(gè)簡單的mvp就已經(jīng)完成了箱季,其他業(yè)務(wù)邏輯根據(jù)實(shí)際情況向接口中添加涯穷。本人也剛加入kotlin開發(fā),至此還有很多細(xì)節(jié)沒有注意藏雏,歡迎大家吐槽??????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拷况,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子掘殴,更是在濱河造成了極大的恐慌蝠嘉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杯巨,死亡現(xiàn)場離奇詭異蚤告,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)服爷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門杜恰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來获诈,“玉大人,你說我怎么就攤上這事心褐√蛳眩” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵逗爹,是天一觀的道長亡嫌。 經(jīng)常有香客問我,道長掘而,這世上最難降的妖魔是什么挟冠? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮袍睡,結(jié)果婚禮上知染,老公的妹妹穿的比我還像新娘。我一直安慰自己斑胜,他們只是感情好控淡,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著止潘,像睡著了一般掺炭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凭戴,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天涧狮,我揣著相機(jī)與錄音,去河邊找鬼簇宽。 笑死勋篓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的魏割。 我是一名探鬼主播譬嚣,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼钞它!你這毒婦竟也來了拜银?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤遭垛,失蹤者是張志新(化名)和其女友劉穎尼桶,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锯仪,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泵督,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庶喜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片小腊。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡救鲤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秩冈,到底是詐尸還是另有隱情本缠,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布入问,位于F島的核電站丹锹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏芬失。R本人自食惡果不足惜楣黍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望麸折。 院中可真熱鬧锡凝,春花似錦粘昨、人聲如沸垢啼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芭析。三九已至,卻和暖如春吞瞪,著一層夾襖步出監(jiān)牢的瞬間馁启,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工芍秆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惯疙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓妖啥,卻偏偏與公主長得像霉颠,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荆虱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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