#android #kotlin #fastadapter
#Android #kotlin #fastadapter
Вопрос:
Я использую библиотеку fastadapter от mikepenz 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
}
Я понятия не имею, как собрать адаптер, чтобы он мог иметь два разных типа представления.
Простой пример? поскольку то, что находится в репозитории, слишком сложно для понимания
Ответ №1:
FastAdapter
Библиотека основана на концепции предоставления типобезопасного интерфейса для создания адаптеров для вашего RecyclerView
. Эта безопасность типов также глубоко вложена в его API (например, через спецификацию универсального типа), чтобы гарантировать отсутствие конфликтов типов.
Обычно у вас будут только одинаковые типы в списке или элементы, которые имеют общий родительский тип. Если элементы достаточно разные, они все равно всегда будут иметь общий IItem<RecyclerView.ViewHolder
тип.
Библиотека предоставляет для этих сценариев псевдоним типа, позволяющий определять ваш адаптер как GenericFastAdapter
, и аналогично этому также предоставляет GenericItemAdapter
или GenericModelAdapter
в зависимости от вашего использования.
Помимо этого библиотека также предоставляет GenericFastItemAdapter
(объединение FastAdapter
и ItemAdapter
)
Пример приложения FastAdapter
включает в себя образец, демонстрирующий использование таких:
Аналогично есть еще один пример, демонстрирующий аналогичный вариант использования с разными моделями, которые сопоставлены с соответствующими элементами здесь: