I使用mikepenz https://github.com/mikepenz/FastAdapter提供的库快速适配器
需要组合不同的视图
Header 1
Item A
Item B
Item C
Hader 2
Item D
Item E
....item的类
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
}我不知道如何组装适配器,以便它可以有两种不同类型的视图。
一个简单的例子?因为存储库中的内容太复杂而无法理解
发布于 2021-02-05 17:56:13
FastAdapter库围绕为RecyclerView构造适配器提供类型安全接口这一概念而构建。这种类型安全性也深度嵌套在其API中(例如,通过泛型类型规范),以确保不会发生类型冲突。
通常情况下,列表中只有相同的类型,或者共享相同父类型的项。如果这些项足够不同,它们仍然将始终共享IItem<RecyclerView.ViewHolder类型。
对于这些场景,该库公开了一个类型别名,以允许将适配器定义为GenericFastAdapter,与此类似,还可以根据您的用例公开GenericItemAdapter或GenericModelAdapter。
除此之外,该库还提供了一个GenericFastItemAdapter (结合了FastAdapter和ItemAdapter)
FastAdapter的示例应用程序包括一个示例,展示了这些功能的用法:
类似的还有另一个例子,展示了一个类似的用例,不同的模型在这里映射到它们各自的项目:
https://stackoverflow.com/questions/66034198
复制相似问题