我使用的是来自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
}
}
}在我的活动中,我尝试创建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>请明确指定。
发布于 2019-11-29 21:48:58
如果你看一下with的签名,你会发现Item没有在它的参数中使用,所以不能从它们中推断出来。您可以使用所需的Item指定返回类型
val fastAdapter: FastAdapter<GenericItem> = FastAdapter.with(listOf(animeAdapter, footerAdapter))就像在this example in README或pass类型参数中显式
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
https://stackoverflow.com/questions/59103385
复制相似问题