0

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
    }

2 種類のビューを表示できるようにアダプターを組み立てる方法がわかりません。

簡単な例?リポジトリにあるものは複雑すぎて理解できないため

4

1 に答える 1

1

このFastAdapterライブラリは、タイプ セーフなインターフェイスを提供してRecyclerView. この型の安全性は、型の競合が発生しないようにするために、その API で (たとえば、ジェネリック型仕様を介して) 深く入れ子になっています。

通常、リスト内には同じタイプしかないか、共通の親タイプを共有するアイテムしかありません。アイテムが十分に異なる場合、それらは常にIItem<RecyclerView.ViewHolderタイプを共有します。

ライブラリは、これらのシナリオに対して型エイリアスを公開して、アダプターを として定義できるようにします。同様に、ユースケースに応じてまたはGenericFastAdapterも公開します。GenericItemAdapterGenericModelAdapter

それを超えて、ライブラリは(とのGenericFastItemAdapter組み合わせ)も提供しますFastAdapterItemAdapter

のサンプル アプリには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

于 2021-02-05T09:56:13.117 に答える