I make a recyclerView and update dataset with notifyDataSetChanged
and it will call onCreateViewHolder
and onBindViewHolder
Is there any way just call onBindViewHolder
but don't call onCreateViewHolder
after notifyDataSetChanged
?
Because i want to save some states in viewholder but still want to update view.
I try to use viewHolder.setIsRecyclable(false)
but not works.
class SelectionAdapter() : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var selectionList = mutableListOf<BetSelection>()
fun setData(selectionList: List<BetSelection>) {
this.selectionList = selectionList.toMutableList()
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val viewBinding = SelectionItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
val viewHolder = SelectionViewHolder(viewBinding, parent.context)
viewHolder.setIsRecyclable(false)
return viewHolder
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is SelectionViewHolder -> {
holder.setSelection(selectionList[position])
}
}
}
override fun getItemCount() = selectionList.count()
}
class SelectionViewHolder(
private val viewBinding: SelectionItemBinding,
private val context: Context
) : RecyclerView.ViewHolder(viewBinding.root) {
private var isOddsInitComplete = false
fun setSelection(selection: Selection) {
//isOddsInitComplete always false because onCreateViewHolder called everytime
if(isOddsInitComplete) {
updateOdds()
} else {
initOddsView()
isOddsInitComplete = true
}
.
.
.
}