RecyclerViewEvent
RecyclerView onItemClick、onItemLongClick、drag、swipe、divider、reuse disorder RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除、优雅解决 EditText 和 CheckBox 复用错乱问题、定向刷新、DiffUtil、局部刷新
Install / Use
/learn @OCNYang/RecyclerViewEventREADME
RecyclerViewEvent
本项目展示内容:
- [x] 点击事件、长按事件
- [x] 分割线
- [x] 拖曳排序、侧滑删除
- [x] 拖曳排序 & 首个固定
- [x] 复用错乱(复选框、编辑框)
- [x] 定向刷新
- [x] DiffUtil 的使用
- [x] Paging 3 的使用
- [ ] DiffUtil & 定向刷新 结合使用
- [ ] 条目长按的上下文菜单按钮
- [x] ConcatAdapter (旧名:MergeAdapter)
<br/><br/><br/>
效果图
- swipe and drag.拖曳 + 滑动删除
- drag. 拖曳 + 首个 item 固定
<img src="https://cdn.jsdelivr.net/gh/ocnyang/gallery@master/github/recyclerviewevent/recy_swipanddrag.gif?imageView2/2/w/200" alt="PointRefresh" width="300"><img src="https://cdn.jsdelivr.net/gh/ocnyang/gallery@master/github/recyclerviewevent/recy_drag.gif?imageView2/2/w/200" alt="PointRefresh" width="300">
1. 基础讲解
这次主要是把 RecyclerView 比较常用的基本的点,在这里集中整理一下。从这篇文章主要梳理以下几点:
- 优雅的实现:item 点击事件 & item 长点击事件
- RecyclerView 添加 divider 的标准姿势
- RecyclerView 实现 item 的拖曳排序和滑动删除
- 拖曳排序时,限制首个 item 固定的实现
详解介绍请看本项目对应的讲解文章:
RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除
2. 解决 RecyclerView 复用错乱 之 优雅方式
当 RcyclerView 中存在 CheckBox 或 EditText 时,因为复用机制的存在,会在滚动时造成数据混乱。 虽然网上流传的有多种方法来解决,但都比较繁琐或存在一定缺陷。 这里给大家提供一种比较优雅而合理的方式来解决复用错乱的问题:
方法详情和讲解请看源码
3. 使用 notifyItemChanged(int position, @Nullable Object payload) 定向刷新
<img src="https://github.com/OCNYang/RecyclerViewEvent/blob/master/docs/PointRefresh.gif?raw=true" alt="PointRefresh" width="300">
仔细观察效果图,会发现:非定向刷新时条目会有闪动;定向刷新不会有闪动
4. 使用 DiffUtil 实现局部刷新
<img src="https://github.com/OCNYang/RecyclerViewEvent/blob/master/docs/DiffUtil.gif?raw=true" alt="DiffUtil" width="300">具体查看源码说明:Activity AdapterDiffCallback
5. 使用 Paging 3 分页加载
<img src="https://github.com/OCNYang/RecyclerViewEvent/blob/master/docs/Paging3.gif?raw=true" alt="Paging3" width="300">具体查看源码说明:paging3 相关代码
6. ConcatAdapter 实现多个不同的 Adapter 合并成一个
<img src="https://github.com/OCNYang/RecyclerViewEvent/blob/master/docs/ConcatAdapter.gif?raw=true" alt="ConcatAdapter" width="300">使用方式:
recyclerView.adapter = ConcatAdapter(mHeaderAdapter, mAdapter, mFooterAdapter)
- 可以使不同的 Adapter (不同数据、不同布局) 合并成一个 Adapter 设置给 RecyclerView 显示;
- 功能有点类似多 ItemViewType 的 Adapter,不同的是每个 Adapter 是从上到下按顺序显示的,不能混排
- 您可能使用过
ViewHolder.getAdapterPosition来获得 Adapter 中某个 ViewHolder 的位置。现在,因为我们合并了多个 Adapter,作为代替,您需要调用ViewHolder.getBindingAdapterPosition ()。
Related Skills
node-connect
337.1kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.1kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.1kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.1kCommit, push, and open a PR

