【发布时间】:2021-06-19 22:23:33
【问题描述】:
我有下面的代码,我在具有多个 ViewHolders 的 RecyclerView 中使用泛型,我正在尝试使用 DataBinding 升级此代码,我正在寻找具有多个 ViewHolders 的 RecyclerView 并在其中使用 DataBinding。
class JumbledWordAdapter(
var items: List<JumbledWord>
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
companion object {
const val TYPE_PLACE_HOLDER = 0
const val TYPE_ANSWER = 1
const val INVALID = -1
}
var selectedItemPos = INVALID
override fun getItemViewType(position: Int) = (items[position].currentType)//choose layout type
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
TYPE_PLACE_HOLDER -> {
PlaceHolderViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.lyt_jumbled_word_place_holder_item, parent, false)
)
}
TYPE_ANSWER -> {
AnswerViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.lyt_jumbled_word_answer_item, parent, false)
)
}
else -> throw IllegalArgumentException("Invalid view type")
}
}
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is PlaceHolderViewHolder -> holder.bind(position)
is AnswerViewHolder -> holder.bind(position)
}
}
inner class PlaceHolderViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
private val cardParent: MaterialCardView = view.findViewById(R.id.cardParent)
fun bind(position: Int) {
cardParent.isSelected = items[position].isSelected
cardParent.setOnClickListener {
//some code.
}
}
}
inner class AnswerViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
private val cardParent: MaterialCardView = view.findViewById(R.id.cardParent)
private val tvLetter: TextView = view.findViewById(R.id.tvLetter)
fun bind(position: Int) {
tvLetter.text = items[position].answer
cardParent.setOnClickListener {
//some code.
}
}
}
}
需要在这个适配器类中实现Databinding。
【问题讨论】:
标签: android performance android-layout kotlin generics