android - 如何使用 Kotlin 创建通用 RecyclerView.Adapter
问题描述
我创建了一个扩展 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)
}
}
当我尝试将持有人转换为 SwipeableViewHolder 时出现错误。错误是:“需要一个类型参数。如果您不想传递类型参数,请使用 SwipeableViewHolder<*>”
我已经尝试了很多不同的方法来实现这一点,但似乎无法弄清楚。
Android Studio 版本:3.5.3 KOtlin 插件编译器:1.3
解决方案
因为SwipeableViewHolder
是一个内部类SwipeableAdapter
(它需要一个类型参数),所以你必须指定类型参数SwipeableAdapter
是什么作为你的演员的一部分:
val viewHolder = holder as SwipeableAdapter<*>.SwipeableViewHolder
推荐阅读
- python - 熊猫中的多个文件读取是否尊重顺序?
- json - 有什么方法可以检查 json 文件中的实际损坏记录是什么
- php - 如何在获取销售收据添加响应时存储 TxnLineID?
- php - 以编程方式在灵活内容中插入转发器行
- html - 未捕获的 ReferenceError:未定义“函数”
- c - libbpf:加载 ELF 部分时出错。BTF:0
- google-apps-script - 在 Google 表格模板中使用 DriveApp 类
- kubernetes - 具有 Kubernetes 持久卷的 SCDF 中的计划任务
- android - 当我向下和向上滚动 RecyclerView 时,Viewpager 图像消失
- node.js - 异步/等待不等待返回值