-
Notifications
You must be signed in to change notification settings - Fork 5.2k
QuickAdapterHelper
mumu edited this page May 30, 2023
·
8 revisions
工具类,用于构造“加载更多”、头部尾部、组合Adapter等功能
此类的本质是使用 ConcatAdapter
进行组合,从而实现“向上加载”、“向下加载”、“头部”、“尾部”的功能。
通过此工具类包装以后,可以得到一个对外的adapter,用于设置给RecyclerView
。
ConcatAdapter 是官方提供的类。我们之前常常遇到一种场景:即Adapter
里有很多的ItemType
,导致Adapter内部逻辑交织,内容庞大,对于数据的刷新,变得难以操作,一不小心就因为index的计算错误,而导致各种各样的问题,通常这样的代码难以维护。
之前的BRVAH
为了解决这样的问题,提供了各种多类型Adapter,包括很多三方库也是这样做的,但是依然不能解决的问题就是:如何精准又安全稳定的刷新数据。
为此,官方推出了ConcatAdapter
,此与系统版本无关,只需要升级你Jetpack
的RecycleView
版本即可。
ConcatAdapter
是一个Adapter
的集合,你可以理解为List
数组,通过一个ConcatAdapter
把各种Adapter
串起来。每个子Adapter
的index
都可以是从 0 开始,也就意味着,每个子Adapter
只需要操作各自的数据,互不干扰。天然达到了代码隔离作用。
看如下示例图,例如:列表由三个子Adapter构成:
______________________________________
| |
| FirstAdapter |
| |
| |
----------------------------------------
| |
| |
| SecondAdapter |
| |
| |
----------------------------------------
| |
| |
| ThirdAdapter |
| |
| |
--------------------------------------
ConcatAdapter
此类必须通过使用 Build
来构建,必须传递你的列表adapter,build时包含Api如下:
// 使用 Builder 创建 QuickAdapterHelper 对象,这里需要传入你的列表 mAdapter
val helper = QuickAdapterHelper.Builder(mAdapter)
// 设置尾部"加载更多"
.setTrailingLoadStateAdapter(……)
// 设置首部“加载更多”
.setLeadingLoadStateAdapter(……)
// 设置 ConcatAdapter 的配置
.setConfig(……)
.build()
// 注意⚠️:RecyclerView 必须使用 helper 提供的 adapter
recyclerView.adapter = helper.adapter
QuickAdapterHelper
内部已经有了你的列表mAdapter
,据此为原点,提供以下功能:
// 在 mAdapter 前面,添加其他 adapter
fun addBeforeAdapter(adapter: BaseQuickAdapter<*, *>)
// 在 mAdapter 后面,添加其他 adapter
fun addAfterAdapter(adapter: BaseQuickAdapter<*, *>)
// 移除一个 adapter
fun removeAdapter(adapter: BaseQuickAdapter<*, *>)
// 清理 mAdapter 前面的所有 Adapter
fun clearBeforeAdapters()
// 清理 mAdapter 后面的所有 Adapter
fun clearAfterAdapters()