定义MVP框架

xiaoxiao2021-03-01  29

结构如下图所示

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包中的全部文件

 

 

 

转载请注明原文地址: https://www.6miu.com/read-4200108.html

最新回复(0)