new一个module,选择Android Library,命名。
接着就可以直接在库里写mvp,然后引入到别的模块中使用并可以反复使用
其中的方法根据自身情况而定
接口:
model:
public interface IBaseModel {
void serverFail(String msg);}
presenter:
public interface IBasePresenter {
}
view:
public interface IBaseView {
void showLoading();
void hideLoading();
void serverFail(String msg);
}
Base方法
BaseModel:
public class BaseModel implements IBaseModel {
@Override
public void serverFail(String msg) {
}
}
Base Presenter:
public class BasePresenter<M extends BaseModel,V extends IBaseView> implements IBasePresenter {
public M model;
public V view;
/**
* 绑定view和model
* @param m
* @param v
*/
public void attch(M m,V v){
this.model = m;
this.view = v;
}
/**
* 回收资源,解绑,避免内存泄漏
*/
public void detach(){
this.model = null;
this.view = null;
}
}
基类Activity
package bwie.com.mybase.base; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import butterknife.ButterKnife; import butterknife.Unbinder; import bwie.com.mybase.mvp.BaseModel; import bwie.com.mybase.mvp.BasePresenter; import bwie.com.mybase.mvp.IBaseView; /** * Wittmann * 2018/6/27/14:12 * 星期三 * bwie.com.mybase.base * Description: */ public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements IBaseView { public P presenter; private Unbinder unbinder; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(setChildView()); unbinder = ButterKnife.bind(this); initView(); presenter = initPresenter(); if(presenter != null){ presenter.attachView(initModel(),this); } initDate(); } protected abstract void initDate(); protected abstract BaseModel initModel(); protected abstract P initPresenter(); protected abstract void initView(); protected abstract int setChildView(); public void onSuccess(String msg){} @Override protected void onDestroy() { super.onDestroy(); presenter.detachView(); unbinder.unbind(); } }
Fragment的基类
package bwie.com.mybase.base; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import butterknife.ButterKnife; import butterknife.Unbinder; import bwie.com.mybase.mvp.BaseModel; import bwie.com.mybase.mvp.BasePresenter; import bwie.com.mybase.mvp.IBaseView; /** * Wittmann * 2018/6/27/14:42 * 星期三 * bwie.com.mybase.base * Description: */ public abstract class BaseFragment<P extends BasePresenter> extends Fragment implements IBaseView { public P presenter; private View view; private Unbinder unbinder; @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { if(view == null){ view = View.inflate(getActivity(),isLayoutId(),null); unbinder = ButterKnife.bind(this,view); } initView(); presenter = initPresenter(); if(presenter != null){ presenter.attachView(initModel(),this); } initDate(); return view; } protected abstract void initDate(); protected abstract BaseModel initModel(); protected abstract P initPresenter(); protected abstract void initView(); protected abstract int isLayoutId(); public void onSuccess(String msg){} @Override public void onDestroy() { super.onDestroy(); presenter.detachView(); unbinder.unbind(); } }