繁体   English   中英

Kotlin:类型不匹配(RecyclerView.Adapter<RecyclerView.ViewHolder> )

[英]Kotlin: Type mismatch (RecyclerView.Adapter<RecyclerView.ViewHolder>)

我是使用 Kotlin 的新手,我尝试将我的项目从 java 移植到 kotlin。 基本上,我有一个帮助类尝试初始化 recyclerview 布局、适配器等。

在 java 中:适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>
{
  ...
  public static class ViewHolder extends RecyclerView.ViewHolder
  {
    ...
  }
  ...
}

我的辅助功能:

public void init(RecyclerView recyclerView, boolean horizontal, boolean divider, RecyclerView.Adapter adapter, Context context)

当我创建适配器并调用该函数时,它工作正常。

但在 Kotlin 中:适配器

class MyAdapter(...) : RecyclerView.Adapter<MyAdapter.ViewHolder>() {
  ...
  inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
    ...
  }
  ...
}

辅助函数

fun init(recyclerView : RecyclerView, horizontal: Boolean, divider: Boolean, adapter: RecyclerView.Adapter<RecyclerView.ViewHolder>, context: Context) {
  ...
}

当我创建适配器并调用函数时

val myAdapter = MyAdapter(...)
helper.init(listView, false, false, myAdapter, this)

我在需要的地方遇到不匹配错误: RecyclerView.Adapter<RecyclerView.ViewHolder>并找到: MyAdapter

继承明智,它应该工作对吗? 还是我错过了什么?

谢谢!

不完全是,您需要的正确声明是:

class MyAdapter() : RecyclerView.Adapter<RecyclerView.ViewHolder>() 

然后您需要实现诸如此签名之类的方法:

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder

等等

onCreateViewHolder必须返回 ViewHolder 或其子类,例如

return ItemViewHolder(view)

在哪里:-

inner class ItemViewHolder(val mView: View) : RecyclerView.ViewHolder(mView)
{
  val mFieldView: TextView = mView.field
  ...
}

您可以在绑定函数中使用这些知识,例如

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)
{
  val itemHolder = holder as ItemViewHolder
  val item = dataModel[position]
  itemHolder.mFieldView.text = item.field
}

查看您正在使用的适配器类型,有不同类型的适配器,如数组适配器、recyclerView 适配器。 具体来说,在列表视图中,我们使用数组适配器。 而使用回收器视图适配器是回收器视图适配器,如果您使用带有回收器视图的数组适配器,它将显示上述错误。

我遇到过同样的问题。 RecyclerView.Adapter<RecyclerView.ViewHolder>替换为RecyclerView.Adapter<*>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM