Android

Android MVP架构指南

2020-11-25  本文已影响0人  Charles2018

第一步定义Contract(契约)

/*
 * Copyright (c) 2020/11/23. by Onlly
 * 个人简介:野生程序员
 * WX:       i412102100
 * e-mail: 412102100@qq.com
 * Github: Github.com/mingyouzhu
 * 简书: https://www.jianshu.com/u/4198eba0fbdd
 */

...

interface IOrderView : IBView{
    fun onCancelCallback()
    ...
}

interface IOrderPresenter{
    fun onCancelOrder(order_id:String)
    ...
}

interface IOrderModel{
    fun onCancelOrder(order_id:String,callback:ICallback<String>)
    ....
}

第二步实现View层这里以Fragment为例

/*
 * Copyright (c) 2020/11/23. by Onlly
 * 个人简介:野生程序员
 * WX:       i412102100
 * e-mail: 412102100@qq.com
 * Github: Github.com/mingyouzhu
 * 简书: https://www.jianshu.com/u/4198eba0fbdd
 */

...

// 订单列表
public class OrderFragment extends BFragment<IOrderPresenter> implements IOrderView{
    private static String POSITION = "POSITION";
    private static String TYPE = "TYPE";
    public static OrderFragment newInstance(String text,int position) {
        Bundle bundle = new Bundle();
        bundle.putString(TYPE, text);
        bundle.putInt(POSITION, position);
        OrderFragment fragment = new OrderFragment();
        fragment.setArguments(bundle);
        return fragment;
    }

    @Override
    public int onGetLayoutResId() {
        return R.layout.fragment_order_list;
    }

    @Override
    public IOrderPresenter onGetPresenter() {
        return new OrderPresenter(this);
    }

    @Override
    public void onInitView(@NotNull View view) {
        // 获取presenter并调用onGetOrderList接口
        getPresenter().onGetOrderList(false,mType);
    }

    @Override
    public void onCancelCallback() {
        getPresenter().onGetOrderList(false,mType);
    }
}

第三步实现Presenter

/*
 * Copyright (c) 2020/11/23. by Onlly
 * 个人简介:野生程序员
 * WX:       i412102100
 * e-mail: 412102100@qq.com
 * Github: Github.com/mingyouzhu
 * 简书: https://www.jianshu.com/u/4198eba0fbdd
 */

...

class OrderPresenter(view: IOrderView) : BPresenter<IOrderModel, IOrderView>(view),IOrderPresenter{

    override fun onGetModel(): IOrderModel {
        return OrderModel(IAPIService::class.java)
    }

    override fun onCancelOrder(order_id: String) {
        view.onShowWait("请稍等", null)
        model.onCancelOrder(order_id, object : ICallback<String> {
            override fun onResponse(response: String) {
                view.onShowToastShort(response)
                view.onHideWait()
                view.onCancelCallback()
            }

            override fun onFailure(reason: String) {
                view.onShowToastShort(reason)
                view.onHideWait()
            }
        })
    }

    ...

第四步实现Model

/*
 * Copyright (c) 2020/11/23. by Onlly
 * 个人简介:野生程序员
 * WX:       i412102100
 * e-mail: 412102100@qq.com
 * Github: Github.com/mingyouzhu
 * 简书: https://www.jianshu.com/u/4198eba0fbdd
 */

...

class OrderModel(service:Class<IAPIService>) : BaseModel<IAPIService>(service),IOrderModel{
    var cu_page = 1

    override fun onCancelOrder(order_id: String, callback: ICallback<String>) {
        val uid = SPUtil.getValue(App.getContext(), Constants.USER_ID,String::class.java)
        val call = service.onCancelOrder(uid,order_id)
        call.enqueue(object:Callback<BaseData<String>>{
            override fun onResponse(call: Call<BaseData<String>>, response: Response<BaseData<String>>) {
                callback.onResponse(response.body()!!.msg!!)
            }

            override fun onFailure(call: Call<BaseData<String>>, t: Throwable) {
                callback.onFailure(t.message!!)
            }
        })
    }
  
   ...

上一篇 下一篇

猜你喜欢

热点阅读