结构如下图所示
Model层回调接口如下
Presenter层调用model层的方法请求数据,如果是异步则通过该回调将数据返回到P层
public interface BaseCallInterface<T> {
/**
* 回调数据
* @param t
*/
void callBackData(T t);
}
Model文件如下
Model层获取数据的方法
public interface Model {
void setCallBack(BaseCallInterface callBack);
}
View文件
连接Activity和Presenter的接口
public interface View {
/**
* 基础的返回,可以删除,只是抽取共性
* @param info
*/
void showMessage(String info);
}
presenter文件
P层,连接V层和Model层, V层调用P层的方法-->>然后P层通过执行Model层的方法,Model层在执行完方法后执行接口方法,
由于P层实现了Model层的回调,然后通过P层执行V层的方法完成M和V层之间的数据传递
public interface Presenter<M extends Model, V extends View> {
/**
* 注册Model层
*
* @param model
*/
void registerModel(M model);
/**
* 注册View层
*
* @param view
*/
void registerView(V view);
/**
* 获取View
*
* @return
*/
V getView();
/**
* 销毁动作(如Activity、Fragment的卸载)
*/
void destroy();
}
BaseMvp文件
抽取Activity和Fragment的初始化方法以及创建MVP的方法
public interface BaseMvp<M extends Model, V extends View, P extends BasePresenter> {
M createModel();
V createView();
P createPresenter();
ViewGroup getViewGroupRoot();
int getContentViewId();
void initSubView(android.view.View view);
void initData();
}
BasePresenter文件
实现Presenter接口的抽象类
public abstract class BasePresenter<M extends Model, V extends View> implements Presenter<M, V> {
/**
* 使用弱引用来防止内存泄漏
*/
private WeakReference<V> wrf;
protected M model;
protected boolean isViewAttrs(){
if (wrf!=null){
return true;
}else {
return false;
}
}
@Override
public void registerModel(M model) {
this.model = model;
}
@Override
public void registerView(V view) {
wrf = new WeakReference<V>(view);
}
@Override
public V getView() {
return wrf == null ? null : wrf.get();
}
/**
* 在Activity或Fragment卸载时调用View结束的方法
*/
@Override
public void destroy() {
if (wrf != null) {
wrf.clear();
wrf = null;
}
onViewDestroy();
}
protected abstract void onViewDestroy();
}
BaseMvpActivity文件如下
public abstract class BaseMvpActivity<M extends Model, V extends View, P extends BasePresenter> extends AppCompatActivity implements BaseMvp<M, V, P> {
protected P presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
android.view.View containerView = getLayoutInflater().inflate(getContentViewId(),
getViewGroupRoot());
setContentView(containerView);
//创建Presenter
presenter = createPresenter();
if (presenter != null) {
//将Model层注册到Presenter中
presenter.registerModel(createModel());
//将View层注册到Presenter中
presenter.registerView(createView());
}
initSubView(containerView);
initData();
}
@Override
public abstract int getContentViewId();
@Override
public ViewGroup getViewGroupRoot() {
return null;
}
@Override
public void initSubView(android.view.View view) {
}
@Override
public void initData() {
}
@Override
protected void onDestroy() {
super.onDestroy();
if (presenter != null) {
//Activity销毁时的调用,让具体实现BasePresenter中onViewDestroy()方法做出决定
presenter.destroy();
}
}
}
BaseMvpFragment如下
public abstract class BaseMvpFragment<M extends Model, V extends View, P extends BasePresenter> extends Fragment implements BaseMvp<M, V, P> {
protected P presenter;
@Override
public void onAttach(Context context) {
super.onAttach(context);
presenter = createPresenter();
if (presenter != null) {
presenter.registerModel(createModel());
presenter.registerView(createView());
}
}
@Override
public android.view.View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
android.view.View containerView = inflater.inflate(getContentViewId(), container,
false);
initSubView(containerView);
initData();
return containerView;
}
@Override
public void onDetach() {
super.onDetach();
if (presenter != null) {
presenter.destroy();
}
}
}
以上就是base包中的全部文件