java mvp_MVP开发框架

MVP

App based on Material Design + MVP + Rxjava + Retrofit + Okhttp + Glide + Cache + theme + others

本项目本着简洁的思想,让开发更加简单,抽取出了core做为库,可以直接引入进行快捷开发,项目仍在改进中,如果有好的建议或者发现什么问题欢迎issue,email424346976@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库

dependencies {

compile 'com.hpw.mvpframe:core:1.0.0'

}

```

2.接口定义(demo)

```

abstract class DailyPresenter extends CoreBasePresenter {

public abstract void getDailyData();

public abstract void startInterval();

}

interface DailyModel extends CoreBaseModel {

Observable getDailyData();

Observable 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 getDailyData() {

return RxService.createApi(ZhiHuApi.class).getDailyList().compose(RxUtil.rxSchedulerHelper());

}

@Override

public Observable 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 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(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 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(R.layout.item_weichat) {

@Override

protected void convert(BaseViewHolder helper, WXItemBean item) {

//viewholder

}

})

即可实现列表(使用recyclerviewpager也是如初简单,具体看demo,recyclerviewpager可以实现viewpager所有功能)

TODO添加aop

继续优化

还有很多。。。

Thanks

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值