如何在 android 中向 FastAdapter 添加不同的适配器

How to add different adapters to FastAdapter in android

我正在使用来自 mikepenz 的 android FastAdapter 库 我有两个适配器 1:AnimeAdapter:用于显示动漫列表 2:进度适配器:图书馆提供的那个

这是我的 AnimeAdapter 的 AnimeItem:

open class AnimeItem(anime: Anime): AbstractItem<AnimeItem.ViewHolder>() {
    var name: String? = anime.name
    var nbEpisodes: String? = anime.nbEpisodes


    override val layoutRes: Int
        get() = R.layout.anime_item
    override val type: Int
        get() = R.id.anime_item_id

    override fun getViewHolder(v: View): ViewHolder {
        return ViewHolder(v)
    }

    class ViewHolder(view: View) : FastAdapter.ViewHolder<AnimeItem>(view) {
        var animeNameTv: TextView = view.findViewById(R.id.anime_item_anime_name)
        var animeEpisodesTv: TextView = view.findViewById(R.id.anime_item_nb_episodes)

        override fun bindView(item: AnimeItem, payloads: MutableList<Any>) {
            animeNameTv.text = item.name
            animeEpisodesTv.text = item.nbEpisodes
        }

        override fun unbindView(item: AnimeItem) {
            animeNameTv.text = null
            animeEpisodesTv.text = null
        }
    }
}

在我的 activity 中,我尝试创建 2 个适配器并将它们添加到 FastAdapter,如下所示:

val animeAdapter = ItemAdapter<AnimeItem>()
val footerAdapter = ItemAdapter<ProgressItem>()
var fastAdapter = FastAdapter.with(listOf(animeAdapter, footerAdapter))

但我总是得到这个错误:

类型推断失败:没有足够的信息来推断

中的参数项
fun <Item : GenericItem /* = IItem<out RecyclerView.ViewHolder> */, A : IAdapter<*>> with(adapters: Collection<A>?) : FastAdapter<Item>

请明确说明。

如果您查看 with 的签名,您会发现 Item 未在其参数中使用,因此无法从中推断出来。您可以指定 return 类型与您想要的 Item

val fastAdapter: FastAdapter<GenericItem> = FastAdapter.with(listOf(animeAdapter, footerAdapter))

this example in README或显式传递类型参数

val fastAdapter = FastAdapter.with<GenericItem, ItemAdapter<*>>(listOf(animeAdapter, footerAdapter))

老实说,看看代码,尤其是 this cast

fastAdapter.adapters.addAll(adapters as Collection<IAdapter<Item>>)

让我怀疑签名应该固定为

fun <Item : GenericItem> with(adapters: Collection<IAdapter<Item>>?): FastAdapter<Item>

哪个不会有这个问题

我将其作为问题发布:https://github.com/mikepenz/FastAdapter/issues/838