• MVP


    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()
        }
    
    }
  • 相关阅读:
    WC2021 游记
    TC11054
    P5904
    CF741D
    CF1467 题解
    [CTSC2008]网络管理 [树剖+整体二分]
    [HNOI2015]接水果[整体二分]
    [SDOI2010]粟粟的书架 [主席树]
    整体二分的一些见解[整体二分学习笔记]
    P2710 数列[fhq treap]
  • 原文地址:https://www.cnblogs.com/gloryhope/p/10248979.html
Copyright © 2020-2023  润新知