Tips for professional use of RecyclerView. Part 1
I decided to write this article because noted that many developers make mistakes when using
RecyclerView, even though Google has released it for quite some time.
The points described here were mentioned in various reports and materials on Google Devs.
In this article, I will briefly describe the key points from this video , and you do not have to watch it right now. But I recommend watching it in its entirety after reading the article.
1. setHasFixedSize attribute
Set the attribute
recyclerViewdo not plan to resize your children dynamically.
As a result,
recyclerViewit will not be redrawn every time the data is updated in the list item, this item is redrawn itself.
2. Click listener
Install the click handler in
Whenever a user clicks on a list item, he
viewHoldertells the adapter position where this click occurred (
vh.getAdapterPosition()). This is important because the elements can be moved inside the adapter, and the associated
viewcomponents will not be recreated.
As a result, by the time the
view-component is created, the following may happen: the list item will be, say, at position 2, but when the user clicks on it, the element will already be at position 5. Thus, using the method
vh.getAdapterPosition()ensures that the correct index list.
3. Using various types of view components
layoutwhen using different types of
viewcomponents (for example,
If your adapter supports various types
view-components, the method
onCreateViewHolderwill look something like the image below. You need to write an operator
switchinside the method
onCreateViewHolderto implement the necessary logic for the corresponding types of
But instead of these types, you can return immediately
layout. This will save you from boilerplate code in
This technique cannot be used constantly, because sometimes you may need more complex logic inside each one selected
layoutfor different cases. But if this is not your case, then the returned ones
layoutare the right way to work with various types of
DiffUtilto add new data to
recyclerViewchanges, most developers call a method
notifyDataSetChanged()to display updated data on a UI. They simply do not know that this method is resource-intensive, and that it is here that
DiffUtilcopes much more efficiently.
DiffUtil- This is a utility class that can calculate the difference between two lists in the form of a list of updates, which then converts the first list to the second. It can be used to calculate updates in the adapter
recyclerView. To use
DiffUtil, you must implement
DiffUtil.Callback, in which there are several required methods required to implement the logic
The biggest advantage
DiffUtilis that in
RecyclerViewyou can update a specific text in a
TextViewspecific element, instead of redrawing the entire list. To do this, you need to implement method
DiffUtil.Callback. There is a very good article on this subject.
In the second part, we will consider other tips for quality use