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 简介
版权声明:本文标题:Android 项目开发必用的库 (1)BaseQuickAdapter 简介 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1700371195a417876.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论