【android开发框架】mvp框架

注意:一个V对应一个P,多个V和P可以对应一个M

目录

注意:一个V对应一个P,多个V和P可以对应一个M

1.说明

2.例子

a.Model

b.View

c.Presenter


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)));
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值