zoukankan      html  css  js  c++  java
  • 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()
        }
    
    }
  • 相关阅读:
    将B表中符合条件的数据更新到A表中
    oracle : 无法更新 ON 子句中引用的列
    查看Oracle 版本信息
    将分组的其他内容以字符串形式展示
    将datatable 保存为 Excel文件(高效率版本)
    winform 中一个窗口嵌套到另一个窗口
    一个切换bool属性的小方法
    html5相关知识点的总结(有一些错误或者不足的地方)
    get和post的区别
    cookie的作用
  • 原文地址:https://www.cnblogs.com/gloryhope/p/10248979.html
Copyright © 2011-2022 走看看