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() } }