結構如下圖所示
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包中的全部文件