gpt4 book ai didi

android - PagedListAdapter 中的通用列表

转载 作者:行者123 更新时间:2023-11-29 01:04:31 25 4
gpt4 key购买 nike

我想使用通用类作为 PagingList<> 中的项目

interface GenericInterface{}
class GenericImplementation: GenericInterface{}

作为 Kotlin 文档状态:here继承 in list 是不可能的,尽管我可以声明 T

的参数的泛型类型
public abstract class PagedListAdapter<T, VH extends RecyclerView.ViewHolder>

喜欢

class MAdapter: PagedListAdapter<GenericInterface, MAdapter.ViewHolder>(DIFF_CALLBACK){...}

我无法将通用列表传递给它

mAdapter.setList(listOfGenericImplementation)

因为out , in类型投影不接受修饰符

PagedListAdapter<in/out GenericInterface, ..>(..){...}

有解决办法吗?

最佳答案

好的,所以我遇到了同样的问题,但除了这个问题之外找不到任何东西,但过了一会儿我想通了,我的方法是在你自己的类中定义泛型,然后将它传递给PagedListAdapter,例如:

你会像这样启动它:

var adapter: MAdapter<GenericImplementation, MAdapter.ViewHolder>

然后您的适配器类将如下所示:

class MAdapter<T : GenericInterface, VH : RecyclerView.ViewHolder> : PagedListAdapter<T, VH>(
object : DiffCallback<T>() {
override fun areItemsTheSame(oldItem: T, newItem: T): Boolean =
oldItem.id == newItem.id

override fun areContentsTheSame(oldItem: T, newItem: T): Boolean =
oldItem == newItem
}) {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH =
MAdapter.ViewHolder(parent)

override fun onBindViewHolder(holder: VH, position: Int) {
holder.bindTo(getItem(position)!!)
}
}

如您所见,DiffCallback 必须是内联的,而不是将其放在伴随对象中的规范。

关于android - PagedListAdapter 中的通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48305871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com