[英]About RecyclerView.ViewHolder and RecyclerView.Adapter
[英]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.