如何在 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
我正在使用来自 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