简体   繁体   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>

I know the title is a bit weird, sorry.我知道标题有点奇怪,对不起。 This is a weird one that I'm not even sure I can explain it correctly, here is my attempt:这是一个奇怪的问题,我什至不确定我能否正确解释它,这是我的尝试:

Basically I want to implement a wrapper for any adapters that extend RecyclerView.Adapter<RecyclerView.ViewHolder> , the wrapper eventually will be able to insert rows if needed and it will modify things like getItemCount() as necessary, but I'm nowhere near that part yet.基本上我想为任何扩展RecyclerView.Adapter<RecyclerView.ViewHolder>的适配器实现一个包装器,如果需要,包装器最终将能够插入行,它会根据需要修改诸如getItemCount()之类的东西,但我还差得远那部分呢。

This is my class definition:这是我的类定义:

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

I pass to it the original adapter which I want to wrap.我将要包装的原始适配器传递给它。

If I have the class definition like that, and then I try to create an instance of MyRecyclerAdapterWrapper like this:如果我有这样的类定义,然后我尝试像这样创建MyRecyclerAdapterWrapper的实例:

val wrapper = MyRecyclerAdapterWrapper(activity, myOriginalAdapter)

Where myOriginalAdapter is an instance of:其中myOriginalAdapter是以下实例:

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

I then get an error saying that it is expecting RecyclerView.Adapter<RecyclerView.ViewHolder> but instead got MyOriginalAdapter .然后我收到一条错误消息,说它期待RecyclerView.Adapter<RecyclerView.ViewHolder>但得到了MyOriginalAdapter

So then I tried the out keyword on the class definition like this:所以我在类定义上尝试了out关键字,如下所示:

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

And that allows my constructor call MyRecyclerAdapterWrapper(activity, myOriginalAdapter) to stop complaining, however then my MyRecyclerAdapterWrapper class fails at implementing some of the RecyclerView.Adapter<RecyclerView.ViewHolder> overrides because originalAdapter expects Nothing instead of RecyclerView.ViewHolder .这允许我的构造函数调用MyRecyclerAdapterWrapper(activity, myOriginalAdapter)来停止抱怨,但是我的MyRecyclerAdapterWrapper类无法实现一些RecyclerView.Adapter<RecyclerView.ViewHolder>覆盖,因为originalAdapter期望Nothing而不是RecyclerView.ViewHolder

For example inside MyRecyclerAdapterWrapper I have this piece of code:例如在MyRecyclerAdapterWrapper我有这段代码:

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

The error here is Type mismatch Required: Nothing Found: RecyclerView.ViewHolder .这里的错误是Type mismatch Required: Nothing Found: RecyclerView.ViewHolder

So what is the correct way to handle this?那么处理这个问题的正确方法是什么?

Edit: just wanted to be clear that other adapters will also use this wrapper, so the wrapper must be generic.编辑:只是想清楚其他适配器也将使用此包装器,因此包装器必须是通用的。

parameter require Nothing because you declared out for generic parameter参数 require Nothing因为你声明out泛型参数

try to change RecyclerView.ViewHolder to MyOriginalAdapter.MyViewHolder尝试将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.

相关问题 关于RecyclerView.ViewHolder和RecyclerView.Adapter - About RecyclerView.ViewHolder and RecyclerView.Adapter Kotlin:类型不匹配(RecyclerView.Adapter<RecyclerView.ViewHolder> ) - Kotlin: Type mismatch (RecyclerView.Adapter<RecyclerView.ViewHolder>) 从 RecyclerView.ViewHolder 更新 RecyclerView.Adapter 的 ArrayList? - Update ArrayList for RecyclerView.Adapter from RecyclerView.ViewHolder? 类型不匹配,必需:(Recyclerview.Adapter<recyclerview.viewholder> ?..Recyclerview.Adapter&lt;*&gt;,找到:HomeAdapter</recyclerview.viewholder> - Type Mismatch , Required: (Recyclerview.Adapter<Recyclerview.ViewHolder>?..Recyclerview.Adapter<*> , found: HomeAdapter 从ViewHolder获取RecyclerView.Adapter列表 - Getting RecyclerView.Adapter List from ViewHolder RecyclerView.Adapter中的ViewHolder并非特定于位置 - ViewHolder in RecyclerView.Adapter not specific to position RecyclerView.Adapter中的函数viewholder类 - function viewholder class in RecyclerView.Adapter 如何从适配器外部访问Recyclerview.ViewHolder参数? - How to access Recyclerview.ViewHolder params from outside of adapter? 除了 RecyclerView.ViewHolder,如何引用适配器中的变量? - How to refer to the variable in adapter apart from RecyclerView.ViewHolder? 如何使用 Kotlin 创建通用 RecyclerView.Adapter - How to create a generic RecyclerView.Adapter with Kotlin
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM