摘要:作为最常用的控件,受益群体几乎是所有开发者,希望更多开发者能够一起来维护这个项目,把这个项目做得更好,帮助更多人。我的项目可加群,申请的时候把的账号名字备注上否则不予通过,谢谢配合。
RecyclerView作为Android最常用的控件,受益群体几乎是所有Android开发者,希望更多开发者能够一起来维护这个项目,把这个项目做得更好,帮助更多人。Star我的项目可加Q群558178792,申请的时候把GitHub的账号名字备注上否则不予通过,谢谢配合。中国有句古话叫“授人以鱼不如授人以渔”,不仅仅提供使用,还写了如何实现的原理:
「RecyclerView.Adapter优化了吗?」
「BaseRecyclerAdapter之添加动画」
「BaseRecyclerAdapter之添加不同布局(头部尾部)」
「BaseRecyclerAdapter之添加不同布局(优化篇)」
BaseRecyclerViewAdapterHelper
一个强大并且灵活的RecyclerViewAdapter,欢迎使用。(喜欢的可以Star一下)
优化Adapter代码(减少百分之70%代码)
添加点击item点击、长按事件、以及item子控件的点击事件
添加加载动画(一行代码轻松切换5种默认动画)
添加头部、尾部、下拉刷新、上拉加载(感觉又回到ListView时代)
设置自定义的加载更多布局
添加分组(随心定义分组头部)
自定义不同的item类型(简单配置、无需重写额外方法)
设置空布局(比Listview的setEmptyView还要好用!)
如何使用它?先在 build.gradle 的 repositories 添加:
allprojects { repositories { ... maven { url "https://jitpack.io" } } }
然后在dependencies添加:
dependencies { compile "com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.7.9" }如何使用它来创建Adapter?
public class QuickAdapter extends BaseQuickAdapter如何添加item点击、长按事件{ public QuickAdapter(Context context) { super(context, R.layout.tweet, DataServer.getSampleData()); } @Override protected void convert(BaseViewHolder helper, Status item) { helper.setText(R.id.tweetName, item.getUserName()) .setText(R.id.tweetText, item.getText()) .setText(R.id.tweetDate, item.getCreatedAt()) .setVisible(R.id.tweetRT, item.isRetweet()) .linkify(R.id.tweetText); Glide.with(mContext).load(item.getUserAvatar()).crossFade().into((ImageView) helper.getView(R.id.iv)); } }
mQuickAdapter.setOnRecyclerViewItemClickListener(); mQuickAdapter.setOnRecyclerViewItemLongClickListener();新增添加子布局多个控件的点击事件
Adapter
protected void convert(BaseViewHolder helper, Status item) { helper.setOnClickListener(R.id.tweetAvatar, new OnItemChildClickListener()) .setOnClickListener(R.id.tweetName, new OnItemChildClickListener()); }
Activity
mQuickAdapter.setOnRecyclerViewItemChildClickListener(new BaseQuickAdapter.OnRecyclerViewItemChildClickListener() { @Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { String content = null; Status status = (Status) adapter.getItem(position); switch (view.getId()) { case R.id.tweetAvatar: content = "img:" + status.getUserAvatar(); break; case R.id.tweetName: content = "name:" + status.getUserName(); break; } Toast.makeText(AnimationUseActivity.this, content, Toast.LENGTH_LONG).show(); } });如何使用它添加动画?
// 一行代码搞定(默认为渐显效果) quickAdapter.openLoadAnimation();
不喜欢渐显动画可以这样更换
// 默认提供5种方法(渐显、缩放、从下到上,从左到右、从右到左) quickAdapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN);
还是没你喜欢的,你可以自定义
// 自定义动画如此轻松 quickAdapter.openLoadAnimation(new BaseAnimation() { @Override public Animator[] getAnimators(View view) { return new Animator[]{ ObjectAnimator.ofFloat(view, "scaleY", 1, 1.1f, 1), ObjectAnimator.ofFloat(view, "scaleX", 1, 1.1f, 1) }; } });使用它添加头部添加尾部
mQuickAdapter.addHeaderView(getView()); mQuickAdapter.addFooterView(getView());使用它加载更多
mQuickAdapter.openLoadMore(PAGE_SIZE, true); mQuickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() { @Override public void onLoadMoreRequested() { mRecyclerView.post(new Runnable() { @Override public void run() { if (mCurrentCounter >= TOTAL_COUNTER) { mQuickAdapter.notifyDataChangedAfterLoadMore(false); } else { mQuickAdapter.notifyDataChangedAfterLoadMore(DataServer.getSampleData(PAGE_SIZE), true); mCurrentCounter = mQuickAdapter.getItemCount(); } } }); } });设置自定义加载更多布局
mQuickAdapter.setLoadingView(customView);使用分组
public class SectionAdapter extends BaseSectionQuickAdapter如何添加多种类型item?{ public SectionAdapter(Context context, int layoutResId, int sectionHeadResId, List data) { super(context, layoutResId, sectionHeadResId, data); } @Override protected void convert(BaseViewHolder helper, MySection item) { helper.setImageUrl(R.id.iv, (String) item.t); } @Override protected void convertHead(BaseViewHolder helper,final MySection item) { helper.setText(R.id.header, item.header); if(!item.isMroe)helper.setVisible(R.id.more,false); else helper.setOnClickListener(R.id.more, new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,item.header+"more..",Toast.LENGTH_LONG).show(); } }); }
public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter使用setEmptyView{ public MultipleItemQuickAdapter(Context context, List data) { super(context, data); addItmeType(MultipleItem.TEXT, R.layout.text_view); addItmeType(MultipleItem.IMG, R.layout.image_view); } @Override protected 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; } } }
mQuickAdapter.setEmptyView(getView());
感谢持续更新!,所以推荐Star项目
JoanZapata / base-adapter-helper
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/12879.html
摘要:流式布局开发人员不得不收集的代码工具类常用工具日期的替代使用库替代库外加仿边缘返回仿,有指示器强大的的节操播放器底层为哔哩哔哩的开源播放器选择器仿扁平风格网络框架1.照相选相册,裁剪的 library TakePhotohttps://github.com/crazycodeboy/TakePhoto 2几行代码快速集成二维码扫描功能https://github.com/yipianfeng...
摘要:的设计策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。在此采用的是策略模式这样更加灵活,如果需要自定义一个自己的动画,只需要继承实现方法即可。 上篇「RecyclerView.Adapter优化了吗?」主要讲了RecyclerView.Adapter的优化代码以及添加了item的click方法具体实现原理,这篇在...
摘要:基于开发的开发的目前已完成的功能持续更新登录注册登出首页文章列表首页搜索文章项目分类项目列表收藏文章取消收藏收藏列表下载安装点击下载安装地址我的联系方式大家可以关注我的微信公众号秦子帅一个有质量有态度的公众号 QzsWanAndroid 基于 wanandroid.com 开发的 MVP + Retrofit2 + RxJava2 +okhttp3 开发的 Android APP sh...
摘要:描述使用编写的客户端。下载截图数据来源干货集中营依赖库源码地址 描述 使用kotlin编写的Gank客户端。遵循MD设计规范。 下载 fir 截图 showImg(https://segmentfault.com/img/remote/1460000009704047); showImg(https://segmentfault.com/img/remote/1460000009704...
摘要:删除,传入对象的位置。对象从移动到批量添加批量删除改变列表某个布局状态且保持当前位置这种需求是普遍存在的,就是改变列表某一个数据,然后刷新列表,如果是刷新后则会回到最顶部,而同样的操作但是原来滑动的位置不变。 还在用Lisview?RecyclerView都已经出来一年多了! 想必大家多或多或少的接触过或者了解过RecyclerView,为什么没有用起来,原因大概如下? List...
阅读 1786·2021-11-24 09:39
阅读 1218·2021-10-09 09:41
阅读 1695·2019-08-30 15:55
阅读 2047·2019-08-30 15:53
阅读 400·2019-08-29 13:16
阅读 874·2019-08-26 12:20
阅读 2270·2019-08-26 11:58
阅读 2934·2019-08-26 10:19