如何使用Kotlin创建通用的RecyclerView.Adapter

问题描述 投票:0回答:2

我创建了一个扩展RecyclerView.Adapter的Java类。它是通用的,可以接受SwipeableViewHolder类型的任何RecyclerView.ViewHolder类:这是其定义方式:

public abstract class SwipeableAdapter<T extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<T> {

     @Override
    public void onBindViewHolder(T holder, int position) {
        SwipeableViewHolder viewHolder = (SwipeableViewHolder) holder;

        ...
     }

}

这一切正常。但是,当我尝试将其转换为Kotlin时,在onBindViewHolder函数中出现错误:

abstract class SwipeableAdapter<T : RecyclerView.ViewHolder>(protected var mContext: Context) :
        RecyclerView.Adapter<T>() {    

    override fun onBindViewHolder(holder: T, position: Int) {

            val viewHolder = holder as SwipeableViewHolder

            ...
    }

}

这是SwipeableViewHolder类

open inner class SwipeableViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        @BindView(R.id.text_roll) internal var text_1: TextView? = null
        @BindView(R.id.text_trade) internal var text_2: TextView? = null
        @BindView(R.id.text_delete) internal var text_2: TextView? = null

        init {
            ButterKnife.bind(this, itemView)
        }
    }

[尝试将Holder转换为SwipeableViewHolder时出现错误。错误是:“期望一种类型参数。如果您不想传递类型争论,请使用SwipeableViewHolder ”

我尝试了许多不同的方法来实现这一点,但似乎无法弄清楚。

Android Studio版本:3.5.3KOtlin插件编译器:1.3

我创建了一个扩展RecyclerView.Adapter的Java类。它是通用的,可以接受SwipeableViewHolder类型的任何RecyclerView.ViewHolder类:这是其定义方式:public abstract class ...

android generics kotlin recycler-adapter
2个回答
0
投票

因为SwipeableViewHolderSwipeableAdapterinner


0
投票

因为它仅处理SwipeableViewHolder类型的ViewHolders,所以应更改通用类型的界限。然后,您甚至无需进行投射。

© www.soinside.com 2019 - 2024. All rights reserved.