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!!)
}
})
}
...