FastAdapter объединяет заголовки и элементы

#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 включает в себя образец, демонстрирующий использование таких:

https://github.com/mikepenz/FastAdapter/blob/develop/app/src/main/java/com/mikepenz/fastadapter/app/IconGridActivity.kt

Аналогично есть еще один пример, демонстрирующий аналогичный вариант использования с разными моделями, которые сопоставлены с соответствующими элементами здесь:

https://github.com/mikepenz/FastAdapter/blob/develop/app/src/main/java/com/mikepenz/fastadapter/app/MultiTypeModelItemActivity.kt