文章标题
来源:互联网 发布:如何使用淘宝客返利 编辑:程序博客网 时间:2024/06/04 19:20
android的mvp详解
model层:
model的一个接口
IHomeModel.java
public interface IHomeModel {void loadAdsData(Subscriber<HomeOneItemEntity> subscriber);void loadAdsDataTwo(Subscriber<HomeTwoItemEntity> subscriber);void loadAdsDataThree(Subscriber<HomeThreeItemEntity> subscriber);void loadAdsDataFour(Subscriber<HomeFourItemEntity> subscriber);void loadAdsDataFive(Subscriber<HomeFiveItemEntity> subscriber);}
homeModelImpl.java
public class HomeModelImpl implements IHomeModel { @Override public void loadAdsData(Subscriber<HomeOneItemEntity> subscriber) { // 调用服务返回Observable Observable<HomeOneItemEntity> app_banner = ApiServiceManager.getInstance() .getHotelService() .homeOneItem("app_banner"); app_banner.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .unsubscribeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); } @Override public void loadAdsDataTwo(Subscriber<HomeTwoItemEntity> subscriber) { Observable<HomeTwoItemEntity> app_banner = ApiServiceManager.getInstance() .getHotelService() .homeTwoItem(); app_banner.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .unsubscribeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); } @Override public void loadAdsDataThree(Subscriber<HomeThreeItemEntity> subscriber) { Observable<HomeThreeItemEntity> app_banner = ApiServiceManager.getInstance() .getHotelService() .homeThreeItem("app_under_top"); app_banner.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .unsubscribeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); } @Override public void loadAdsDataFour(Subscriber<HomeFourItemEntity> subscriber) { Observable<HomeFourItemEntity> app_banner = ApiServiceManager.getInstance() .getHotelService() .homeFourItem(10,1); app_banner.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .unsubscribeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); } @Override public void loadAdsDataFive(Subscriber<HomeFiveItemEntity> subscriber) { Observable<HomeFiveItemEntity> app_banner = ApiServiceManager.getInstance() .getHotelService() .homeFiveItem(); app_banner.observeOn(AndroidSchedulers.mainThread()) .subscribeOn(Schedulers.newThread()) .unsubscribeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); }}
Presenter层
Presenter的基类
BasePresenter.java
public abstract class BasePresenter<IV extends BaseView>{ Reference<IV> mViewRef;//View接口类型的弱引用 CompositeSubscription mCompositeSubscription; @UiThread public void attachView(IV v) { mViewRef = new WeakReference<>(v); } public IV getView() { return mViewRef.get(); } public boolean isAttchView() { return mViewRef != null && mViewRef.get() != null; } @UiThread public void detachView() { onUnsubscribe(); if (mViewRef != null) { mViewRef.clear(); mViewRef = null; } } public static class MvpViewNotAttachedException extends RuntimeException { public MvpViewNotAttachedException() { super("Please call Presenter.attachView(MvpView) before" + " requesting data to the Presenter"); } } //RXjava取消注册,以避免内存泄露 public void onUnsubscribe() { if (mCompositeSubscription != null && mCompositeSubscription.hasSubscriptions()) { mCompositeSubscription.unsubscribe(); } } //RXjava注册 public void addSubscription(Subscription subscriber) { if (mCompositeSubscription == null) { mCompositeSubscription = new CompositeSubscription(); } mCompositeSubscription.add(subscriber); }}
HomePresenter.java
public class HomePresenter extends BasePresenter<IHomeView> { private IHomeModel model; public HomePresenter() { model = new HomeModelImpl(); } /** * 加载广告数据 */ public void loadAdsData() { model.loadAdsData(new BaseSubscriber<HomeOneItemEntity>() { //请求数据失败 @Override public void onError(ExceptionHandle.ResponeThrowable e) { getView().onFail(e); } //请求数据成功 @Override public void onSuccess(HomeOneItemEntity result) { getView().onSuccess(result); } //请求数据完成 @Override public void onFinish() { getView().onFinish(); } }); } /** * 第二个item */ public void loadAdsDataTwo() { model.loadAdsDataTwo(new BaseSubscriber<HomeTwoItemEntity>() { //请求数据失败 @Override public void onError(ExceptionHandle.ResponeThrowable e) { getView().onFail(e); } //请求数据成功 @Override public void onSuccess(HomeTwoItemEntity result) { getView().onSuccess(result); } //请求数据完成 @Override public void onFinish() { getView().onFinish(); } }); } /** * 第三个item */ public void loadAdsDataThree() { model.loadAdsDataThree(new BaseSubscriber<HomeThreeItemEntity>() { //请求数据失败 @Override public void onError(ExceptionHandle.ResponeThrowable e) { getView().onFail(e); } //请求数据成功 @Override public void onSuccess(HomeThreeItemEntity result) { getView().onSuccess(result); } //请求数据完成 @Override public void onFinish() { getView().onFinish(); } }); } /** * 第四个item */ public void loadAdsDataFour() { model.loadAdsDataFour(new BaseSubscriber<HomeFourItemEntity>() { //请求数据失败 @Override public void onError(ExceptionHandle.ResponeThrowable e) { getView().onFail(e); } //请求数据成功 @Override public void onSuccess(HomeFourItemEntity result) { getView().onSuccess(result); } //请求数据完成 @Override public void onFinish() { getView().onFinish(); } }); } /** * 第五个item */ public void loadAdsDataFive() { model.loadAdsDataFive(new BaseSubscriber<HomeFiveItemEntity>() { //请求数据失败 @Override public void onError(ExceptionHandle.ResponeThrowable e) { getView().onFail(e); } //请求数据成功 @Override public void onSuccess(HomeFiveItemEntity result) { getView().onSuccess(result); } //请求数据完成 @Override public void onFinish() { getView().onFinish(); } }); }}
View层
fragment的基类
MvpLazyFragment.java
public abstract class MvpLazyFragment<IV extends BaseView, P extends BasePresenter<IV>> extends BaseLazyFragment implements BaseView{ public P mPresenter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (mPresenter == null) { mPresenter = createPresenter(); mPresenter.attachView((IV) this); } return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onDestroyView() { super.onDestroyView(); if (mPresenter != null) { mPresenter.detachView(); } } @Override @NonNull public abstract P createPresenter();}
fragment的一个实现
HomeFragment.java
public class HomeFragment extends MvpLazyFragment<IHomeView, HomePresenter> implements IHomeView { @BindView(R.id.homeXRecyclerView) XRecyclerView homeXRecyclerView; private HomeAdaper homeAdaper; @NonNull @Override public HomePresenter createPresenter() { return new HomePresenter(); } @Override public void initView() { mPresenter.loadAdsData(); mPresenter.loadAdsDataTwo(); mPresenter.loadAdsDataThree(); mPresenter.loadAdsDataFour(); mPresenter.loadAdsDataFive(); homeAdaper = new HomeAdaper(getContext()); homeXRecyclerView.setAdapter(homeAdaper); homeXRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); homeXRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() { @Override public void onRefresh() { mPresenter.loadAdsData(); mPresenter.loadAdsDataTwo(); mPresenter.loadAdsDataThree(); mPresenter.loadAdsDataFour(); mPresenter.loadAdsDataFive(); } @Override public void onLoadMore() { } }); } @Override public void initData() { } @Override public int getLayoutId() { return R.layout.fragment_home; } @Override public void onFail(ExceptionHandle.ResponeThrowable e) { Log.e("a", "请求网络失败"); } @Override public void onFinish() { Log.e("a", "请求网络结束"); } @Override public void onSuccess(HomeOneItemEntity entity) { Log.e("a", "HomeOneItemEntity请求网络成功"); homeAdaper.setOneItem(entity.getData().getList()); } @Override public void onSuccess(HomeTwoItemEntity entity) { Log.e("a", "HomeTwoItemEntity请求网络成功"); homeAdaper.setTwoItem(entity.getData().getIcons()); } @Override public void onSuccess(HomeThreeItemEntity entity) { Log.e("a", "HomeThreeItemEntity请求网络成功"); homeAdaper.setThreeItem(entity.getData().getList()); } @Override public void onSuccess(HomeFourItemEntity entity) { Log.e("a", "HomeFourItemEntity请求网络成功"); homeAdaper.setFourItem(entity.getData().getTopics()); homeXRecyclerView.refreshComplete(); } @Override public void onSuccess(HomeFiveItemEntity entity) { homeAdaper.setFiveItem(entity.getData()); } @OnClick(R.id.homeSeek) public void onClick() { startActivity(new Intent(getActivity(), SeekActivity.class)); }}
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 【BZOJ4027】【HEOI2015】兔子与樱花(贪心+dp)
- 把阿拉伯数字全部转换为大写(1,2,3.... = 一、二、三、)
- ionic 跨页面传值的几种方法
- 机器学习及神经网络发展历程
- 单链表
- 文章标题
- 4.3层层递进——广度优先搜索
- 移动端开发系列笔记(2)—— 移动端特别样式处理
- application loader上传成功,但是iTunes Connect不显示构建版本
- BFS和DFS下的拓扑排序
- 成长之路
- 几句话描述简单算法——排序与搜索
- 百练:放苹果
- tensorflow学习笔记九:将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程