菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
425
0

MVP

原创
05/13 14:22
阅读数 17438

MVP主要是通过接口来实现属性的定义,方法的规范

以简单的MainActivity为例子

首先搭建MVP的基础框架, 定义三个接口

IPresenter,IModel,IView 这三个都是借口,为的是将统一的都要实现的方法提取出来,具体针对功能业务的拓展,在由他们Impl类(或者接口)来定义实现

一般会定义一个契约类来约束定义各层要做的事情

比如

 1 /**
 2  *Create by glorizz on 2018/12/24
 3  *Describe: 契约类,MVP声明调用接口, 和 数据格式 都是显示在这里面
 4  */
 5 interface SearchContract {
 6     interface View : IView {
 7         fun showHotSearchData(hotSearchDatas: MutableList<HotSearchBean>)
 8     }
 9 
10     interface Presenter : IPresenter<View> {
11         fun  getHotSearchData()
12     }
13 
14     interface Model : IModel {
15 
16         fun getHotSearchData(): Observable<HttpResult<MutableList<HotSearchBean>>>
17 
18     }
19 
20 }

然后第三步:在具体的类中实现我们在接口中定义的方法

class SearchActivity : BaseMvpActivity<SearchContract.View, SearchContract.Presenter>(), SearchContract.View {

    override fun createPresenter(): SearchContract.Presenter = SearchPresenter()

    override fun attachLayoutRes(): Int = R.layout.activity_search

    override fun initData() {

    }

    override fun initView() {
        super.initView()
        button.onClick {
            showToast("点击事件")
            Log.e("glz",mPresenter.toString())
            mPresenter?.getHotSearchData()
        }
    }

    override fun start() {

    }

    override fun showHotSearchData(hotSearchDatas: MutableList<HotSearchBean>) {
        showToast("流程走通")
        button.text = hotSearchDatas.toString()
    }


}
/**
 *Create by glorizz on 2018/12/24
 *Describe: 具体的实现在这一步
 */
class SearchPresenter : BasePresenter<SearchContract.Model, SearchContract.View>(), SearchContract.Presenter {

    override fun createModel(): SearchContract.Model? = SearchModel()

    @SuppressLint("CheckResult")
    override fun getHotSearchData() {//实现这个从M层获取数据的方法
        Log.e("glz", "searchPresenter init")
//        val observable: Observable<HttpResult<MutableList<HotSearchBean>>>? = mModel?.getHotSearchData()
//        observable?.subscribeOn(Schedulers.computation())?.subscribe(object : Observer<HttpResult<MutableList<HotSearchBean>>> {
//            override fun onComplete() {
//                Log.e("glz", "Complete")
//            }
//
//            override fun onSubscribe(d: Disposable) {
//                Log.e("glz", "subscribe")
//            }
//
//            override fun onNext(t: HttpResult<MutableList<HotSearchBean>>) {
//
//                Log.e("glz", "next")
//                Log.e("glz", t.toString())
//            }
//
//            override fun onError(e: Throwable) {
//                Log.e("glz", e.toString())
//                Log.e("glz", "error")
//            }
//
//        })

        //mModel在上步已经完成了初始化(override fun createModel())
        mModel?.getHotSearchData()?.subscribe(object :Consumer<HttpResult<MutableList<HotSearchBean>>>{
            override fun accept(t: HttpResult<MutableList<HotSearchBean>>?) {
                Log.e("glzz",t.toString())
            }

        }
        )
    }
/**
 *Create by glorizz on 2018/12/24
 *Describe:数据层的具体实现 请求网络,获取数据
 */
class SearchModel:BaseModel(),SearchContract.Model{

    override fun getHotSearchData(): Observable<HttpResult<MutableList<HotSearchBean>>> {
        return ApiClient.apiStore.getHotSearchData()
    }

}

 

发表评论

0/200
425 点赞
0 评论
收藏
为你推荐 换一批