admin 管理员组

文章数量: 1087818

Android 项目开发必用的库 (1)BaseQuickAdapter 简介

         今天双十一呀 ,昨晚有多少人进行了需要剁手的活动 。看天猫的数据今年又是再次打破之前的记录 ,今年 100 亿 用了 96 秒 ,比去年的 125 秒多了 29 秒 ,按照这个速度明年估计的 66 秒左右 ,那后年铁定的到一分钟之内 。今年是 5G 的商用年 ,后年 5G怎么也的大部分地区可用 ,所以使用 5G 在一分钟之内交易额达到 100亿 的话 ,从技术上来看问题不大 (纯属在扯哈哈哈哈)。

 

 

 

( 以上写于 双十一 只有遍开始了 996 )

 

简介

Github :BaseRecyclerViewAdapterHelper

官网使用指南:使用指南

使用复杂度:0.5

推荐指数:* * * * *

 

 

锲子

RecyclerView  (RecyclerView 不止眼前的 setAdapter 和 notify ,还有诗和远方 )

作为可以取代 ListView 的一个扩展性控件 ,除了包含其原有的功能更是扩展了一些强大的效果 (展示大量数据)。

但是强大的背后必然会使用复杂 ,除了都需要考虑的复用 Item 之外 ,RecyclerView 还要考虑事件回调和添加 HeaderView 和 FooterView 的数据刷新问题 ,再往细了说还得多加一个指定方向的 LayoutManager 。

再深一点的话 ,两个控件的缓存也有区别 ,毕竟 RecyclerView 名义上是友好大量数据展示 。

还有刷新功能 ,RecyclerView 的局部刷新功能属于一个大的亮点 ,不过跟他的缓存嗨是有关系的 (略过吧 ,缓存有点东西)

 

PS:遇到过的问题

1. RecyclerView 高度不能自适应 。

2.RecyclerView 最后一个 Item 显示不全被遮挡 。

 

PS :附带几篇 RecyclerView 的介绍 。

在微信的搜一搜上查找的 。

 

 

使用介绍

强烈建议 clone 一下跑一遍 Demo 试试 。体验一下这个库的简单与强大 。

Gradle 导入此依赖

    api 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.42'

 

和原始的adapter相对,减少70%的代码量。

一点都不夸张 。

 

正常Adapter

public class LearnHistoryLiveAdapter extends BaseQuickAdapter<HistoryLearnBean, BaseViewHolder> {public LearnHistoryLiveAdapter(@Nullable List<HistoryLearnBean> data) {super(R.layout.item_learn_history_live, data);}@Overrideprotected void convert(BaseViewHolder helper, HistoryLearnBean item) {helper.setText(R.id.tv_classroom_name, item.getTargetTitle());helper.setText(R.id.tv_live_name, item.getTitle());CircleProgressView progress_view = helper.getView(R.id.progress_view);// 观看率TextView tv_percent = helper.getView(R.id.tv_percent);// 观看率 数字TextView tv_live_work = helper.getView(R.id.tv_live_work);// 直播出勤时长.........}
}

PS:该库不影响原有 RecyclerView 代码 code 。

 

添加事件

    @Overrideprotected void convert(BaseViewHolder helper, HistoryLearnBean item) {helper.setText(R.id.tv_classroom_name, item.getTargetTitle());helper.setText(R.id.tv_live_name, item.getTitle());CircleProgressView progress_view = helper.getView(R.id.progress_view);// 观看率TextView tv_percent = helper.getView(R.id.tv_percent);// 观看率 数字TextView tv_live_work = helper.getView(R.id.tv_live_work);// 直播出勤时长.........helper.addOnClickListener(R.id.tv_introduction).addOnClickListener(R.id.tv_homework).addOnClickListener(R.id.tv_courseware).addOnClickListener(R.id.tv_study_type);}
      adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {@Overridepublic void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {HistoryLearnBean item = (HistoryLearnBean) adapter.getData().get(position);switch (view.getId()) {case R.id.tv_courseware:ARouter.getInstance().build("/edusoho/lesson/filelist").withInt(Const.ID, item.getId()).withString(Const.TITLE, item.getTitle()).navigation(mActivity);break;case R.id.tv_introduction:if (introductionDialog == null)introductionDialog = new IntroductionDialog();introductionDialog.setLoadUrl(getResources().getString(R.string.app_base_url) + Const.LESSON_INTRODUCATION.replace("id", String.valueOf(item.getId())));introductionDialog.setCancelOnTouchOutside(false);introductionDialog.showDialog(getFragmentManager());break;default:break;}}});

 

添加头部和尾部

adapter.addHeaderView(initHeaderView());
adapter.addFooterView(initFooterView());

PS : 不需要去考虑数据刷新的问题 。

 

上拉加载

回调

mQuickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {@Override public void onLoadMoreRequested() {mRecyclerView.postDelayed(new Runnable() {@Overridepublic void run() {if (mCurrentCounter >= TOTAL_COUNTER) {//数据全部加载完毕mQuickAdapter.loadMoreEnd();} else {if (isErr) {//成功获取更多数据mQuickAdapter.addData(DataServer.getSampleData(PAGE_SIZE));mCurrentCounter = mQuickAdapter.getData().size();mQuickAdapter.loadMoreComplete();} else {//获取更多数据失败isErr = true;Toast.makeText(PullToRefreshUseActivity.this, R.stringwork_err, Toast.LENGTH_LONG).show();mQuickAdapter.loadMoreFail();}}}}, delayMillis);}}, mReyclerView);

 

加载状态

// 加载完成
mQuickAdapter.loadMoreComplete();// 加载失败
mQuickAdapter.loadMoreFail();// 加载结束
mQuickAdapter.loadMoreEnd();

 

多布局

数据 Bean 或者 Module 需要 试下 MultiItemEntity 并且重写 getItemType()函数 

 

public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem, BaseViewHolder> {public MultipleItemQuickAdapter(List data) {super(data);addItemType(MultipleItem.TEXT, R.layout.text_view);addItemType(MultipleItem.IMG, R.layout.image_view);}@Overrideprotected void convert(BaseViewHolder helper, MultipleItem item) {switch (helper.getItemViewType()) {case MultipleItem.TEXT:helper.setImageUrl(R.id.tv, item.getContent());break;case MultipleItem.IMG:helper.setImageUrl(R.id.iv, item.getContent());break;}}}

 

 

 

 

参考 :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文标签: Android 项目开发必用的库 (1)BaseQuickAdapter 简介