I am working with GridLayoutManager and I have encountered unexpected RecyclerView's behaviour. If spanCount is greater than 4, the RecyclerView continuously recreates ViewHolders on scrolling.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
recyclerView.layoutManager = GridLayoutManager(this, 7)
recyclerView.adapter = Adapter()
}
private class Adapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
//continuously invokes while scrolling:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val view:View = TextView(parent.context).apply {
text = "Hello!"
}
return object : RecyclerView.ViewHolder(view) {}
}
override fun getItemCount(): Int = 3500
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, position: Int) {}
}
How to fix it and force RecyclerView.Adapter to reuse ViewHolders?