MVP快速开发框架
来源:互联网 发布:矩阵 w什么意思 编辑:程序博客网 时间:2024/05/22 13:22
MVP
项目github地址https://github.com/SuperMan42/MVP
App based on Material Design + MVP + Rxjava + Retrofit + Okhttp + Glide + Cache + theme + others
本项目本着简洁的思想,让开发更加简单,抽取出了core做为库,可以直接引入进行快捷开发,项目仍在改进中,如果有好的建议或者发现什么问题欢迎issue,email<424346976@qq.com>,如果感觉对你有帮助也欢迎点个star,fork,本项目仅做学习交流使用
QQ群:482866708
Preview
- 总览(列表)
- 图片选择器和表情键盘(支持动态表情和emoji表情等)
- 夜间和日间模式切换
Download APK
(Android 5.0 or above)
Points
- 使用Rxjava配合Retrofit2+okhttp做网络请求和缓存
- 使用RxUtil对线程操作和网络请求结果处理做了封装
- 使用RxManager对订阅生命周期做了统一管理
- 使用RxBus做了组件间通信
- 使用RxPermissions对android6.0进行权限申请
- 使用Material Design控件和动画
- 使用MVP架构整个项目,并且抽取出core做为库,导入core即可省去50%的代码开发哦
- 使用Glide做图片处理和加载
- 使用Fragmentation简化Fragment的操作和懒加载
- 日间和夜间模式切换
- 添加了图片选择器(高仿微信)和表情键盘(支持动态表情)
- 自己封装了recyclerview和recyclerviewpager实现下拉刷新,上拉加载更多和pagerview功能(只需简单几句代码即可实现各种列表,无需adapter,无需自己设计分页加载)
- 使用x5WebView做阅览页
- 日报首页的头部可以循环滚动(使用了rxjava轮循和recyclerviewpager)
使用
1.导入core库
repositories { maven { url 'https://dl.bintray.com/hpw42/maven' }}dependencies { compile 'com.hpw.mvpframe.core.1.0.0'}
2.接口定义(demo)
abstract class DailyPresenter extends CoreBasePresenter<DailyModel, DailyView> { public abstract void getDailyData(); public abstract void startInterval(); } interface DailyModel extends CoreBaseModel { Observable<DailyListBean> getDailyData(); Observable<ZhihuDetailBean> getZhihuDetails(int anInt); } interface DailyView extends CoreBaseView { void showContent(DailyListBean info); void doInterval(int i); }
model(只处理数据)
presenter(用来处理vm的业务逻辑)
view(界面交互)
3.实现model(demo)
public class DailyModel implements ZhihuContract.DailyModel { @Override public Observable<DailyListBean> getDailyData() { return RxService.createApi(ZhiHuApi.class).getDailyList().compose(RxUtil.rxSchedulerHelper()); } @Override public Observable<ZhihuDetailBean> getZhihuDetails(int anInt) { return RxService.createApi(ZhiHuApi.class).getDetailInfo(anInt).compose(RxUtil.rxSchedulerHelper()); }}
4.实现presenter(demo)
public class DailyPresenter extends ZhihuContract.DailyPresenter { private int topCount = 0; private int currentTopCount = 0; @Override public void onStart() { } @Override public void getDailyData() { mRxManager.add(mModel .getDailyData() .subscribe( dailyListBean -> { mView.showContent(dailyListBean); topCount = dailyListBean.getTop_stories().size(); }, e -> mView.showError("数据加载失败ヽ(≧Д≦)ノ") )); } @Override public void startInterval() { mRxManager.add(Observable.interval(5, TimeUnit.SECONDS) .compose(RxUtil.rxSchedulerHelper()) .subscribe(aLong -> { if (currentTopCount == topCount) currentTopCount = 0; mView.doInterval(currentTopCount++); } )); }}
三者的创建无先后顺序,按自己的业务逻辑来
RxManage用于管理订阅者,观察者以及事件
发送事件:mRxManage.post(Constants.msg, user);
接受事件:mRxManage.on(Constants.msg, arg ->mView.initUserInfo((_User) arg));
5.列表的实现
public class WechatFragment extends CoreBaseFragment<WechatPresenter, WechatModel> implements ZhihuContract.WechatView { CoreRecyclerView coreRecyclerView; private static int pageNum = 10; @Override public int getLayoutId() { return 0; } @Override public View getLayoutView() { coreRecyclerView = new CoreRecyclerView(mContext).init(new BaseQuickAdapter<WXItemBean, BaseViewHolder>(R.layout.item_weichat) { @Override protected void convert(BaseViewHolder helper, WXItemBean item) { Glide.with(mContext).load(item.getPicUrl()).crossFade().into((ImageView) helper.getView(R.id.iv_wechat_item_image)); helper.setText(R.id.tv_wechat_item_title, item.getTitle()) .setText(R.id.tv_wechat_item_from, item.getDescription()) .setText(R.id.tv_wechat_item_time, item.getCtime()) .setOnClickListener(R.id.ll_click, v -> { WechatDetailsActivity.start(mContext, item.getTitle(), item.getUrl()); }); } }).openLoadMore(pageNum, page -> mPresenter.getWechatData(pageNum, page)) .openRefresh(); return coreRecyclerView; } @Override public void initUI(View view, @Nullable Bundle savedInstanceState) { } @Override public void showContent(List<WXItemBean> mList) { coreRecyclerView.getAdapter().addData(mList); } @Override public void showError(String msg) { coreRecyclerView.showLoadMoreFailedView(); }}
无需自己创建adapter,无需自己写下拉刷新和上拉加载更多的逻辑(只要添加openLoadMore(pageSize, addDataListener) openRefresh()
即可实现刷新和加载)
无需写xml布局文件(也可写,demo里两种实现方式)只需要在getLayoutView()
中 return
new CoreRecyclerView(mContext).init(new BaseQuickAdapter<WXItemBean, BaseViewHolder>(R.layout.item_weichat) { @Override protected void convert(BaseViewHolder helper, WXItemBean item) { //viewholder }})
即可实现列表(使用recyclerviewpager也是如初简单,具体看demo,recyclerviewpager可以实现viewpager所有功能)
TODO
- 添加aop
- 继续优化
- 还有很多。。。
Thanks
知乎日报API 微信精选API
- MVP快速开发框架
- android mvp快速开发框架介绍(dileber的简介)
- android mvp快速开发框架介绍(开始dileber)
- android mvp快速开发框架介绍(继续dileber)
- android mvp快速开发框架介绍(dileber的集成)
- XDroidMvp 轻量级的Android MVP快速开发框架
- android 快速开发框架,基于组件化的MVP结构
- MVPArms MVP快速集成框架
- 开发框架 MVC MVP MVVM
- android mvp快速开发框架介绍(dileber使用之小工具使用)
- android mvp快速开发框架介绍(自动生成android代码工具介绍)
- android mvp快速开发框架介绍(dileber使用之图片下载工具)
- Android Mvp快速搭建框架MVP+Dagger2+Retrofit+Rxjava
- 开发模式——MVP框架开发
- Android快速集成框架:MVP+Dagger+主流框架
- 安卓项目快速开发框架, MVP + Retrofit + RxJava,Activity 和 Fragment 结合 MVP 模式的完整封装,大大减少代码量
- 一套整合主流HTTP网络、图片加载、MVP(RxJava2+Dagger2)架构的快速高效的开发框架RxEasyAndroid
- 开发框架学习篇之MVP
- Unity基础包 FirstPersonController下的MouseLook 脚本研究
- cmder
- codevs 2488 绿豆蛙的归宿 题解报告
- 解析json数组对象
- iOS 多线程编程<十七、NSURLSession的基本用法>
- MVP快速开发框架
- javascript 节流器
- js字符串转义 方法参数
- ButterKnife框架使用
- Qt5 网络篇 获取本机网络信息
- 集合框架ArrayList、List、Vector+JAVA学习笔记-DAY15
- 面试必备
- textfield只能输入数字,(登录、注册电话号码的格式判断)等正则表达
- iOS-苹果开发者账号申请之邓白氏编码查询