Я пытаюсь создать класс абстрактного фрагмента, который устанавливает представление переработчика. Это соответствующая часть моего адаптера:
class PeopleAdapter(context: Context?) : RecyclerView.Adapter<PeopleAdapter.PersonViewHolder>() {
inner class PersonViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
// ...
}
// ...
}
Это абстрактный фрагмент:
abstract class RecyclerFragment : Fragment() {
protected abstract fun createAdapter(context: Context?): RecyclerView.Adapter<RecyclerView.ViewHolder>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.recycler_view, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val adapter = createAdapter(context)
recycler_view.adapter = adapter
// ...
}
}
Вот как я бы хотел использовать:
class PeopleFragment : RecyclerFragment() {
override fun createAdapter(context: Context?): RecyclerView.Adapter<RecyclerView.ViewHolder> {
return PeopleAdapter(context)
}
}
Android Studio выдает ошибку return PeopleAdapter(context)
:
Несоответствие типов: предполагаемый тип - PeopleAdapter, но
Ожидание RecyclerView.Adapter
Я не понимаю, почему это проблема. PersonAdapter
расширяет RecyclerView.Adapter
, а PersonViewHolder
расширяет RecyclerView.ViewHolder
, поэтому не подразумевается ли, что PersonAdapter
расширяется RecyclerView.Adapater<RecyclerView.ViewHolder>
?
Я попытался изменить метод createAdapter
следующим образом:
protected abstract fun <T : RecyclerView.ViewHolder?> createAdapter(context: Context?): RecyclerView.Adapter<T>
Я также изменил реализацию:
override fun <T : RecyclerView.ViewHolder?> createAdapter(context: Context?): RecyclerView.Adapter<T> {
return PeopleAdapter(context)
}
На этот раз ошибка:
Несоответствие типов: предполагаемый тип - PeopleAdapter, но
Ожидание RecyclerView.Adapter
Опять же, я ожидаю, что типы выстроятся в линию, но не уверен, что делаю неправильно.