注意:一个V对应一个P,多个V和P可以对应一个M
目录
1.说明
1.m ~~> model 用来处理数据的
2.v ~~> view 用来处理UI的
3.p ~~> presenter 用来连接model和view的
2.例子
a.Model
Model:基础接口
public interface Model {
}
BaseModel:抽象接口(model基类)
public abstract class BaseModel {
}
XXModel:mvp中处理数据的接口,方法用于get、set或处理数据等
public interface ManagerModel extends Model {
List<XX> initData();
XX getXX(XX mData);
}
XXModelImpl:处理数据接口的实现类
public class XXModelImpl extends BaseModel implements ManagerModel {
private static final String TAG = ManagerModelImpl.class.getSimpleName();
private List<Integer> imgLists;
//XX为bean实体类
@Override
public List<XX> initData() {
List<XX> mData = new ArrayList<>();
mData.add(new XX(x, x, x, x));
return mData;
}
@Override
public XX getXX(XX mData) {
return XX;
}
}
b.View
BaseView:View的基类
public interface BaseView {
void showDialogMsg(String msg,String btnSure,String btnCancel);
void showToastMsg(String msg);
}
XXView:MVP中处理UI的类
public interface XXView extends BaseView{
void initData(List<XX> XX);
}
activity/fragmentBase:XXView(UI)的实现基类
public abstract class BaseFragment <V extends BaseView, P extends XXBasePresenter<V>> extends Fragment {
private static final String TAG = BaseFragment.class.getSimpleName();
private P mPresenter;
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView() called with: inflater = [" + inflater + "], container = [" + container + "], savedInstanceState = [" + savedInstanceState + "]");
return inflater.inflate(getLayoutRes(),container,false);
}
@Override
public void onStart() {
Log.d(TAG, "onStart() called");
super.onStart();
//需要在initView前初始化的工具类写在这里
ScreenUtil.init(getContext());
mPresenter = initPresenter();
mPresenter.init(getContext(),getXXView());
mPresenter.onForeground();
initView();
}
abstract int getLayoutRes();
abstract void initView();
abstract V getXXView();
abstract P initPresenter();
public P getPresenter(){
return mPresenter;
}
}
activity/fragment:XXView(UI)的实现类
public class ApplicationManagerFragment extends BaseFragment<ManagerView, ManagerPresenter> implements ManagerView, View.OnClickListener {
private static final String TAG = ApplicationManagerFragment.class.getSimpleName();
public ApplicationManagerFragment(){
}
//Fragment的xml
@Override
int getLayoutRes() {
return R.layout.fragment_home_page;
}
@Override
void initView() {
}
private void initFragmentView() {
}
@Override
ManagerView getManagerView() {
return this;
}
@Override
ManagerPresenter initPresenter() {
return new ManagerPresenterImpl();
}
@Override
public void onClick(View v) {
}
@Override
public void showDialogMsg(String msg,String btnSure,String btnCancel) {
}
@Override
public void showToastMsg(String msg) {
ToastUtil.makeText(getContext(),msg,Toast.LENGTH_LONG).show();
}
@Override
public void initData(List<XX> XX) {
mData = XX;
}
c.Presenter
Presenter:基础接口
public interface Presenter<V extends BaseView> {
void init(Context context,V view);
void onForeground();
void onBackground();
void showToastMsg();
void showDialogMsg();
}
BasePresenter:presenter抽象基类
public abstract class BasePresenter<V extends BaseView,M extends Model> implements Presenter<V> {
private static final String TAG = BasePresenter.class.getSimpleName();
private M model;
private Context context;
private WeakReference<V> view;
@Override
public void init(Context context, V view) {
this.context = context;
this.view = new WeakReference<>(view);
this.model = initModel();
}
@Override
public void onForeground() {
Log.d(TAG, "onForeground() called");
}
@Override
public void onBackground() {
Log.d(TAG, "onBackground() called");
}
abstract M initModel();
abstract void initState();
abstract void initDate();
public M getModel(){
return model;
}
public V getView(){
return view.get();
}
public Context getContext(){
return context;
}
}
XXPresenter:用来沟通M和V的接口类
public interface XXPresenter extends Presenter<SetupView> {
void getNewVersion();
boolean getIsAutoUpdate();
void showBarDialogMsg();
}
XXPresenterImpl:用来实现沟通M和V的类
public class XXPresenterImpl extends BasePresenter<XXView, XXModel> implements XXPresenter {
private static final String TAG = XXPresenterImpl.class.getSimpleName();
private XXModel model;
public XXPresenterImpl(){
model = new XXModelImpl();
}
@Override
XXModel initModel() {
return model;
}
@Override
void initState() {
Log.d(TAG, "initState() called");
}
@Override
void initDate() {
Log.d(TAG, "initDate() called");
}
@Override
public void getNewVersion() {
Log.d(TAG, "getNewVersion() called");
getView().getNewVersion(getModel().getNewVersion());
}
@Override
public boolean getIsAutoUpdate() {
Log.d(TAG, "getIsAutoUpdate() called"+getModel().getIsAutoUpdate());
return getModel().getIsAutoUpdate();
}
@Override
public void showToastMsg() {
Log.d(TAG, "pageToastMsg() called");
getView().showToastMsg(model.showToastMsg());
}
@Override
public void showDialogMsg() {
Log.d(TAG, "packageDialogMsg() called");
getView().showDialogMsg(model.showDialogMsg().get(0),model.showDialogMsg().get(1),model.showDialogMsg().get(2));
}
@Override
public void showBarDialogMsg() {
getView().showDialogMsg(model.showDialogMsg().get(0),Integer.valueOf(model.showDialogMsg().get(3)),Integer.valueOf(model.showDialogMsg().get(4)));
}