首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在安卓系统中为FastAdapter添加不同的适配器

如何在安卓系统中为FastAdapter添加不同的适配器
EN

Stack Overflow用户
提问于 2019-11-29 18:50:50
回答 1查看 660关注 0票数 0

我使用的是来自mikepenz的android FastAdapter库,我有两个适配器1: AnimeAdapter :用于显示动画列表2:进度适配器:库提供的适配器

下面是我在AnimeAdapter上的AnimeItem:

代码语言:javascript
复制
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中,如下所示:

代码语言:javascript
复制
val animeAdapter = ItemAdapter<AnimeItem>()
val footerAdapter = ItemAdapter<ProgressItem>()
var fastAdapter = FastAdapter.with(listOf(animeAdapter, footerAdapter))

但我总是得到这样的错误:

类型推断失败:信息不足,无法推断中的参数项

代码语言:javascript
复制
fun <Item : GenericItem /* = IItem<out RecyclerView.ViewHolder> */, A : IAdapter<*>> with(adapters: Collection<A>?) : FastAdapter<Item>

请明确指定。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-29 21:48:58

如果你看一下with的签名,你会发现Item没有在它的参数中使用,所以不能从它们中推断出来。您可以使用所需的Item指定返回类型

代码语言:javascript
复制
val fastAdapter: FastAdapter<GenericItem> = FastAdapter.with(listOf(animeAdapter, footerAdapter))

就像在this example in README或pass类型参数中显式

代码语言:javascript
复制
val fastAdapter = FastAdapter.with<GenericItem, ItemAdapter<*>>(listOf(animeAdapter, footerAdapter))

老实说,看看代码,特别是this cast

代码语言:javascript
复制
fastAdapter.adapters.addAll(adapters as Collection<IAdapter<Item>>)

这让我怀疑签名应该被修复为

代码语言:javascript
复制
fun <Item : GenericItem> with(adapters: Collection<IAdapter<Item>>?): FastAdapter<Item>

不会有这个问题。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59103385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档