MVP模式的简单实现——Only Code

主要类IBaseView,IBasePresenter,BasePresenter

-IBaseView:
public interface IBaseView {
    void showProgress();
    void dismissProgress();
}
-IBasePresenter:
public interface IBasePresenter<T extends IBaseView > {
    void attachView(T rootView);
    void detachView();
}
-BasePresenter:
public abstract class BasePresenter<T extends IBaseView> implements  IBasePresenter<T> {
    public T mRootView;
    @Override
    public void attachView(T rootView) {
        this.mRootView = rootView;
    }

    /***
     * 检测rootView
     */
    public void checkView(){
        if(mRootView ==null){
            throw  new RuntimeException("Please First use function attachView()");
        }
    }

    @Override
    public void detachView() {
        this.mRootView = null;
    }
}

项目中改写了一个查找用户的页面 以下是相关类:

-FriendSearchModel:
public class FriendSearchModel {

    public class Bean{
        private int status;
        private String msg;
        private List<User> data;

        public int getStatus() {
            return status;
        }

        public void setStatus(int status) {
            this.status = status;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        public List<User> getData() {
            return data;
        }

        public void setData(List<User> data) {
            this.data = data;
        }

        public class User{
            private String nickname;
            private String face;
            private String uid;

            public String getNickname() {
                return nickname;
            }

            public void setNickname(String nickname) {
                this.nickname = nickname;
            }

            public String getFace() {
                return face;
            }

            public void setFace(String face) {
                this.face = face;
            }

            public String getUid() {
                return uid;
            }

            public void setUid(String uid) {
                this.uid = uid;
            }
        }
    }

    public void getSearchResult(String keyword, BaiSongHttpManager.HttpCallBack listener){
        Map<String,String> map = new HashMap<>();
        map.put("keyword",keyword);
        BaiSongHttpManager.getInstance().postRequest(URLs.PERSON_SEARCH,map,listener);//将结果回调到Presenter中
    }

}
-FriendSearchContract:
public interface FriendSearchContract {
     interface View extends IBaseView{
         void initFriendSearchResult(FriendSearchModel.Bean result);
     }
     interface Presenter extends IBasePresenter<View>{
         void getFriendSearchResult(String keyword);//公司需要不需分页,如需分页getFriendSearchResult(String keyword,int page);
     }
}
-FriendSearchPresenter:
public class FriendSearchPresenter extends BasePresenter<FriendSearchContract.View> implements FriendSearchContract.Presenter {
    private FriendSearchModel model = new FriendSearchModel();
    @Override
    public void getFriendSearchResult(String keyword) {
        checkView();//检测是否绑定
        mRootView.showProgress();
        model.getSearchResult(keyword, new BaiSongHttpManager.HttpCallBack() {
            @Override
            public void onSuccess(String result) {
                mRootView.dismissProgress();
                FriendSearchModel.Bean bean  = ConfigYibaisong.jsonToBean(result,FriendSearchModel.Bean.class);
                mRootView.initFriendSearchResult(bean);
            }

            @Override
            public void onError(String error_msg, Throwable e) {
                mRootView.dismissProgress();
            }
        });
    }
}

接下来是activity

public class FriendSearchActivity extends BaseActivity  implements FriendSearchContract.View{
    private RecyclerView mRecyclerView;
    private TextView tv_cancel;
    private EditText edit_username;
    private ChatGroupUserSearchAdapter mAdapter;
    private FriendSearchPresenter mPresenter;
    private List<FriendSearchModel.Bean.User> mList;
    @Override
    public void initParms(Bundle parms) {
        mPresenter = new FriendSearchPresenter();
        mPresenter.attachView(this);//绑定  ondestory()中需解绑
    }

    @Override
    public int bindLayout() {
        return R.layout.aty_friend_search;
    }

    @Override
    public void initView() {
        edit_username = find(R.id.edit_username);
        mRecyclerView = find(R.id.mRecyclerView);
        tv_cancel = find(R.id.tv_cancel);
        mAdapter = new ChatGroupUserSearchAdapter(this);
        mList = new ArrayList<>();

    }

    @Override
    public void initData() {
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(mAdapter);
    }

    @Override
    public void setListener() {
        tv_cancel.setOnClickListener(this);
        edit_username.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if(actionId == EditorInfo.IME_ACTION_SEARCH&&event!=null){
                    if(TextUtils.isEmpty(edit_username.getText().toString().trim())){
                        AppToastMgr.showToast(AppResourceMgr.getString(FriendSearchActivity.this,R.string.toast_login_empty));

                    }
                }
                return true;
            }
        });

    }



    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.tv_cancel:
                this.finish();
                break;
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mPresenter.detachView();
    }

    @Override
    public void initFriendSearchResult(FriendSearchModel.Bean result) {//对数据进行操作
        if(mList!=null)
            mList.clear();

        mList.addAll(result.getData());
        mAdapter.setData(mList);
        mAdapter.notifyDataSetChanged();
    }
    @Override
    public void showProgress() {
        AppToastMgr.getInstances().showLoading(this);//自己封装好的全局Progress
    }

    @Override
    public void dismissProgress() {
        AppToastMgr.getInstances().cancel();
    }


}

以上就是一个mvp 简单的实现。有不懂的地方留言,自会回复。个人感觉页面逻辑不是很多,接口不多没有必要用mvp ,太浪费时间。

猜你喜欢

转载自blog.csdn.net/a940659387/article/details/79585608
今日推荐