美文网首页
Android Mvp核心精神的简单示例

Android Mvp核心精神的简单示例

作者: 微风细雨007 | 来源:发表于2018-04-08 18:16 被阅读59次

    MVP架构定义

    简称:MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。

    使用原因

    面对几千行的Activity代码,我选择狗带!!!

    官方github项目地址
    分析官方用法

    Model Presenter View
    数据 业务处理 显示
    实体类/数据库 某Presenter类 实现某View的Activity

    简单使用

    需求,点击首页button,显示输入文字。如果用MVC写法将会非常简单,但我就要用MVP,嗯哼

    示例

    零 创建实体类

    data class Name(val name: String, val hobby: String)
    

    一 创建View接口

    interface MainView {
        fun result(inputName: Name)
    }
    

    二 创建Present类

    创建了MainView 稍后会在Activity中赋值

    class MainPresent<T : MainView> {
        lateinit var mView: T
        fun show(name: String, hobby: String) {
            val uName = Name(name, hobby)
            mView.result(uName)
        }
    }
    

    三 Activity的实现

    实现了MainView接口,初始化Presenter需要:1.实例化,2.赋值MainView

    class MainActivity : AppCompatActivity(), MainView {
        override fun result(inputName: Name) {
            toast(inputName.name + "——————" + inputName.hobby)
        }
    
        /**
         * 创建Present
         */
        lateinit var present: MainPresent<MainView>
    
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            initPresent()
            initView()
        }
    
        /**
         * 初始化Present
         */
        private fun initPresent() {
            present = MainPresent()
            present.mView = this
        }
    
        private fun initView() {
            mButton.setOnClickListener {
                val name = mName.text.toString()
                val hobby = mHobby.text.toString()
                present.show(name, hobby)
            }
        }
    }
    

    示例代码

    总结:解耦和,可扩展,逻辑清晰,再也不用在Activity中写几千行代码啦!!!

    相关文章

      网友评论

          本文标题:Android Mvp核心精神的简单示例

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