【发布时间】:2019-04-09 20:24:48
【问题描述】:
我正在尝试创建一个设置回收器视图的抽象片段类。这是我的适配器的相关部分:
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
再次,我希望类型能够排列,但不确定我做错了什么。
【问题讨论】:
标签: android inheritance kotlin android-recyclerview abstract