android - FastAdapter 组合标题和项目
问题描述
我使用 mikepenz 的库 fastadapter https://github.com/mikepenz/FastAdapter
需要结合不同的观点
Header 1
Item A
Item B
Item C
Hader 2
Item D
Item E
....
项目类别
open class SimpleItemVB : AbstractBindingItem<DrawSimpleItemListBinding>() {
var name: String? = null
override val type: Int
get() = R.id.fastadapter_icon_item_id
override fun bindView(binding: DrawSimpleItemListBinding, payloads: List<Any>) {
binding.tvTitle.text = name
}
override fun createBinding(
inflater: LayoutInflater,
parent: ViewGroup?
): DrawSimpleItemListBinding {
return DrawSimpleItemListBinding.inflate(inflater, parent, false)
}
}
显示标题类
open class HeaderVB(
val title: String? = null
) : AbstractBindingItem<DrawHeaderItemListBinding>() {
override val type: Int
get() = R.id.fastadapter_header_item_id
override fun bindView(binding: DrawHeaderItemListBinding, payloads: List<Any>) {
binding.tvTitle.text = title
}
override fun createBinding(
inflater: LayoutInflater,
parent: ViewGroup?
): DrawHeaderItemListBinding {
return DrawHeaderItemListBinding.inflate(inflater, parent, false)
}
}
用于生成项目
private fun fetchItems(): ArrayList<SimpleItemVB> {
val items = ArrayList<SimpleItemVB>()
//How to add header???
for (i in 1..100) {
//How to add header every 3 items???
val simpleItem = SimpleItemVB()
simpleItem.name = "Test $i"
simpleItem.identifier = (100 + i).toLong()
items.add(simpleItem)
}
return items
}
我不知道如何组装适配器,以便它可以有两种不同类型的视图。
一个简单的例子?因为存储库中的内容太复杂而无法理解
解决方案
该FastAdapter
库围绕提供类型安全接口的概念构建,以便为您的RecyclerView
. 这种类型安全性也深深嵌套在其 API 中(例如通过通用类型规范),以确保不会发生类型冲突。
通常你在一个列表中只有相同的类型,或者共享一个共同的父类型的项目。如果项目足够不同,它们仍将始终共享IItem<RecyclerView.ViewHolder
类型。
该库为这些场景公开了一个类型别名,以允许将您的适配器定义为GenericFastAdapter
,并且与此类似,还根据您的用例公开一个GenericItemAdapter
or 。GenericModelAdapter
除此之外,该库还提供了一个GenericFastItemAdapter
(组合FastAdapter
和ItemAdapter
)
的示例应用程序FastAdapter
包括一个展示此类用法的示例:
类似地,还有另一个示例展示了一个类似的用例,其中不同的模型在此处映射到各自的项目:
推荐阅读
- mongodb - MongoDB 控制台 - 使用正则表达式在基于嵌套对象的数组中查找和拉取对象
- c++ - 我应该在线程上调用 processEvents() 吗?
- twilio - 业务方面的 Twilio 通知
- c++ - 是否可以将 Clang-Tidy 与 QNX 一起使用?
- xml - functx:remove-attributes 添加一个空的 xmlns
- azure - 如何创建范围为特定资源类型的 Azure 角色分配
- mysql - 如何在给定附加 ID 的情况下按最近日期排序
- angularjs - Angularjs:在表格中上传文件
- python - 如何向 StepModel 添加倾斜
- reactjs - Jest 和文件加载器导入