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>
网友评论