主要类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 ,太浪费时间。