美文网首页
kotlin mvp架构源码搭建和基础应用

kotlin mvp架构源码搭建和基础应用

作者: 翟小乙 | 来源:发表于2020-10-20 17:08 被阅读0次

MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的[地方Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。目前国内暂时用的最多的是MVP框架。
今天我也刚学习通过kotlin搭建MVP框架,那我们来了解一下下MVP,并搭建一套MVP系统。后面我会做MVP第三库的使用笔记,仅供参考!!!!!

创建BaseView接口,实现接口内几个方法

interface BaseView {
    fun showLoading()
    fun hideLoading()
    fun onError()
}
创建BasePresenter,通过泛型让BasePresenter持有BaseView引用,

mView可以调用BaseView内方法,我们不知道T是什么类型,若果知道了就可以直接调用了,这样我们通过基类建立联系,子类去具体实现。

open class BasePresenter<T: BaseView> {
    lateinit var mView: T
}
创建BaseActivity,继承AppCompatActivity

有些界面是静态的,不需要MVP这种资源


open class BaseActivity:AppCompatActivity(){

}
创建BaseMvpActivity,继承 BaseActivity,来承载它
BasePresenter 是我们去实现逻辑的,BaseView回调界面数据。
所以我们构造基类的时候大多都是通过泛型去构造,去实现子类方法逻辑。

open class BaseMvpActivity<T : BasePresenter<*>> : BaseActivity(), BaseView {
   override fun showLoading() {
   }

   override fun hideLoading() {
   }

   override fun onError() {
   }

   lateinit var mPresenter: T
}
实现一个注册界面的请求:

1.创建RegisterView接口实现BaseView

 open interface RegisterView :BaseView{

     fun registerCallBack()

}

2.创建RegisterPresenter继承BasePresenter
RegisterView基类中已经定义了mView,所以可以直接使用

open class RegisterPresenter: BasePresenter<RegisterView>() {

    fun register(name:String,pwd:String){

        mView.registerCallBack()

    }

}

3.创建RegisterActivity界面继承BaseMvpActivity

mPresenter = RegisterPresenter() mPresenter.mView = this 需要实例化对象,否则调用方法函数为NULL

 
class RegisterActivity : BaseMvpActivity<RegisterPresenter>(),RegisterView {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_register)

        mPresenter = RegisterPresenter()
        mPresenter.mView = this

        mRegisterBtn.setOnClickListener {
            mPresenter.register("123","124")
        }
    }

    override fun registerCallBack() {
        Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show()
    }

}

3.创建RegisterActivity 的布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


    <Button
        android:id="@+id/mRegisterBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注册" />
</LinearLayout>

相关文章

网友评论

      本文标题:kotlin mvp架构源码搭建和基础应用

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