Это решение довольно уродливо, но я предполагаю, что "теоретически" может работать:
inline fun <reified T: RecyclerView.ViewHolder> ViewGroup.create(@LayoutRes res: Int): T {
val inflater = LayoutInflater.from(context)
val itemView = inflater.inflate(res, this, false)
return T::class.java.getConstructor(View::class.java).newInstance(itemView)
}
Что делает последняя строка: 1. Получите конструктор T
, который соответствует T(view: View)
2. вызовите newInstance
этого конструктора, передав ему представление, которое вы надули
Решение адаптировано из https://discuss.kotlinlang.org/t/generic-object-creation/1663/5
Просто вызовите его с помощью:
val viewHolder = my_view_group.create<MyViewHolder>(R.layout.my_layout)