簡體   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