本项目展示内容:
- 点击事件、长按事件
- 分割线
- 拖曳排序、侧滑删除
- 拖曳排序 & 首个固定
- 复用错乱(复选框、编辑框)
- 定向刷新
- DiffUtil 的使用
- Paging 3 的使用
- DiffUtil & 定向刷新 结合使用
- 条目长按的上下文菜单按钮
- ConcatAdapter (旧名:MergeAdapter)
- swipe and drag.拖曳 + 滑动删除
- drag. 拖曳 + 首个 item 固定
这次主要是把 RecyclerView 比较常用的基本的点,在这里集中整理一下。从这篇文章主要梳理以下几点:
- 优雅的实现:item 点击事件 & item 长点击事件
- RecyclerView 添加 divider 的标准姿势
- RecyclerView 实现 item 的拖曳排序和滑动删除
- 拖曳排序时,限制首个 item 固定的实现
详解介绍请看本项目对应的讲解文章:
RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除
当 RcyclerView 中存在 CheckBox 或 EditText 时,因为复用机制的存在,会在滚动时造成数据混乱。 虽然网上流传的有多种方法来解决,但都比较繁琐或存在一定缺陷。 这里给大家提供一种比较优雅而合理的方式来解决复用错乱的问题:
方法详情和讲解请看源码
仔细观察效果图,会发现:非定向刷新时条目会有闪动;定向刷新不会有闪动
具体查看源码说明:Activity AdapterDiffCallback
具体查看源码说明:paging3 相关代码
使用方式:
recyclerView.adapter = ConcatAdapter(mHeaderAdapter, mAdapter, mFooterAdapter)
- 可以使不同的 Adapter (不同数据、不同布局) 合并成一个 Adapter 设置给 RecyclerView 显示;
- 功能有点类似多 ItemViewType 的 Adapter,不同的是每个 Adapter 是从上到下按顺序显示的,不能混排
- 您可能使用过
ViewHolder.getAdapterPosition
来获得 Adapter 中某个 ViewHolder 的位置。现在,因为我们合并了多个 Adapter,作为代替,您需要调用ViewHolder.getBindingAdapterPosition ()
。