Котлин: Несоответствие типов (RecyclerView.Adapter <RecyclerView.ViewHolder>) - PullRequest
0 голосов
/ 16 мая 2019

Я довольно новичок в использовании Kotlin, я попытался перенести свой проект с Java на Kotlin.По сути, у меня есть вспомогательный класс, который пытается инициализировать макет повторного просмотра, адаптер и т. Д.

В java: Adapter

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: Adapter

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

Наследование мудрое, оно должно работать правильно?или я что-то пропустил?

Спасибо!

1 Ответ

0 голосов
/ 16 мая 2019

Не совсем, правильная декларация, которую вы требуете:

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...