# RecyclerViewEvent **Repository Path**: JamesYL/RecyclerViewEvent ## Basic Information - **Project Name**: RecyclerViewEvent - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-15 - **Last Updated**: 2023-12-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RecyclerViewEvent 本项目展示内容: - [x] 点击事件、长按事件 - [x] 分割线 - [x] 拖曳排序、侧滑删除 - [x] 拖曳排序 & 首个固定 - [x] 复用错乱(复选框、编辑框) - [x] 定向刷新 - [x] DiffUtil 的使用 - [x] Paging 3 的使用 - [ ] DiffUtil & 定向刷新 结合使用 - [ ] 条目长按的上下文菜单按钮 - [x] ConcatAdapter (旧名:MergeAdapter)


## 效果图   1. swipe and drag.拖曳 + 滑动删除 2. drag. 拖曳 + 首个 item 固定 PointRefreshPointRefresh ## 1. 基础讲解 这次主要是把 RecyclerView 比较常用的基本的点,在这里集中整理一下。从这篇文章主要梳理以下几点: * 优雅的实现:item 点击事件 & item 长点击事件 * RecyclerView 添加 divider 的标准姿势 * RecyclerView 实现 item 的拖曳排序和滑动删除 * 拖曳排序时,限制首个 item 固定的实现 详解介绍请看本项目对应的讲解文章: **[RecyclerView 梳理:点击&长按事件、分割线、拖曳排序、滑动删除](https://juejin.im/post/5a320ffcf265da43200342a3)** ## 2. 解决 RecyclerView 复用错乱 之 优雅方式 当 RcyclerView 中存在 CheckBox 或 EditText 时,因为复用机制的存在,会在滚动时造成数据混乱。 虽然网上流传的有多种方法来解决,但都比较繁琐或存在一定缺陷。 这里给大家提供一种比较优雅而合理的方式来解决复用错乱的问题: [![reuse disorder](https://github.com/OCNYang/RecyclerViewEvent/blob/master/docs/recyclervieweventreuse_disorder.gif?raw=true)](https://cdn.jsdelivr.net/gh/ocnyang/gallery@master/github/recyclervieweventreuse_disorder.gif) [图片显示失败?点击查看](https://cdn.jsdelivr.net/gh/ocnyang/gallery@master/github/recyclervieweventreuse_disorder.gif) 方法详情和讲解请看[源码](https://github.com/OCNYang/RecyclerViewEvent/blob/master/app/src/main/java/com/ocnyang/recyclerviewevent/reuse_disorder/EleganceMethodActivity.kt) ## 3. 使用 `notifyItemChanged(int position, @Nullable Object payload)` 定向刷新 PointRefresh > 仔细观察效果图,会发现:非定向刷新时条目会有闪动;定向刷新不会有闪动 具体查看源码说明:[NotifyItemAdapter.onBindViewHolder(holder: NotifyItemViewHolder, position: Int, payloads: MutableList)](https://github.com/OCNYang/RecyclerViewEvent/blob/master/app/src/main/java/com/ocnyang/recyclerviewevent/notify_item/NotifyItemActivity.kt) ## 4. 使用 DiffUtil 实现局部刷新 DiffUtil 具体查看源码说明:[Activity](https://github.com/OCNYang/RecyclerViewEvent/blob/master/app/src/main/java/com/ocnyang/recyclerviewevent/diff_util/DiffUtilActivity.kt) [AdapterDiffCallback](https://github.com/OCNYang/RecyclerViewEvent/blob/master/app/src/main/java/com/ocnyang/recyclerviewevent/diff_util/AdapterDiffCallback.kt) ## 5. 使用 Paging 3 分页加载 Paging3 具体查看源码说明:[paging3 相关代码](https://github.com/OCNYang/RecyclerViewEvent/blob/master/app/src/main/java/com/ocnyang/recyclerviewevent/paging3) ## 6. ConcatAdapter 实现多个不同的 Adapter 合并成一个 ConcatAdapter 使用方式: ```java recyclerView.adapter = ConcatAdapter(mHeaderAdapter, mAdapter, mFooterAdapter) ``` * 可以使不同的 Adapter (不同数据、不同布局) 合并成一个 Adapter 设置给 RecyclerView 显示; * 功能有点类似多 ItemViewType 的 Adapter,不同的是每个 Adapter 是从上到下按顺序显示的,不能混排 * 您可能使用过 `ViewHolder.getAdapterPosition` 来获得 Adapter 中某个 ViewHolder 的位置。现在,因为我们合并了多个 Adapter,作为代替,您需要调用 `ViewHolder.getBindingAdapterPosition ()`。