繁体   English   中英

"如何为 RecyclerView 适配器创建一个包装器,该包装器将接受任何实现 RecyclerView.Adapter 的适配器<RecyclerView.ViewHolder>"

[英]How can I create a wrapper for the RecyclerView Adapter that will accept any Adapter that implements RecyclerView.Adapter<RecyclerView.ViewHolder>

我知道标题有点奇怪,对不起。 这是一个奇怪的问题,我什至不确定我能否正确解释它,这是我的尝试:

基本上我想为任何扩展RecyclerView.Adapter<RecyclerView.ViewHolder>的适配器实现一个包装器,如果需要,包装器最终将能够插入行,它会根据需要修改诸如getItemCount()之类的东西,但我还差得远那部分呢。

这是我的类定义:

class MyRecyclerAdapterWrapper(activity: Activity,val originalAdapter: RecyclerView.Adapter<RecyclerView.ViewHolder>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

我将要包装的原始适配器传递给它。

如果我有这样的类定义,然后我尝试像这样创建MyRecyclerAdapterWrapper的实例:

val wrapper = MyRecyclerAdapterWrapper(activity, myOriginalAdapter)

其中myOriginalAdapter是以下实例:

class MyOriginalAdapter() : RecyclerView.Adapter<MyOriginalAdapter.MyViewHolder>() {

然后我收到一条错误消息,说它期待RecyclerView.Adapter<RecyclerView.ViewHolder>但得到了MyOriginalAdapter

所以我在类定义上尝试了out关键字,如下所示:

class MyRecyclerAdapterWrapper(activity: Activity,val originalAdapter: RecyclerView.Adapter<out RecyclerView.ViewHolder>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

这允许我的构造函数调用MyRecyclerAdapterWrapper(activity, myOriginalAdapter)来停止抱怨,但是我的MyRecyclerAdapterWrapper类无法实现一些RecyclerView.Adapter<RecyclerView.ViewHolder>覆盖,因为originalAdapter期望Nothing而不是RecyclerView.ViewHolder

例如在MyRecyclerAdapterWrapper我有这段代码:

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        originalAdapter.onBindViewHolder(holder,position)
}

这里的错误是Type mismatch Required: Nothing Found: RecyclerView.ViewHolder

那么处理这个问题的正确方法是什么?

编辑:只是想清楚其他适配器也将使用此包装器,因此包装器必须是通用的。

参数 require Nothing因为你声明out泛型参数

尝试将RecyclerView.ViewHolder更改为MyOriginalAdapter.MyViewHolder


class MyRecyclerAdapterWrapper(activity: Activity,val originalAdapter: RecyclerView.Adapter<MyOriginalAdapter.MyViewHolder>) : RecyclerView.Adapter<MyOriginalAdapter.MyViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyOriginalAdapter.MyViewHolder {
        TODO("Not yet implemented")
    }

    override fun onBindViewHolder(holder: MyOriginalAdapter.MyViewHolder, position: Int) {
        originalAdapter.onBindViewHolder(holder, position)
    }

    override fun getItemCount(): Int {
        TODO("Not yet implemented")
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM