Using DiffUtil in Android RecyclerView

Mert Şimşek
Aug 20, 2016 · 2 min read

DiffUtil is a utility class that can calculate the difference between two lists and output a list of update operations that converts the first list into the second one.It can be used to calculate updates for a RecyclerView Adapter.

Most of the time our list changes completely and we set new list to RecyclerView Adapter. And we call notifyDataSetChanged to update adapter. NotifyDataSetChanged is costly. DiffUtil class solves that problem now. It does its job perfectly!

Lets create a usecase for that. Lets say we have a person list which we add persons randomly. Then we sort the list by age and update recyclerview.

I am going to use static data to keep implementation simple.

DataProvider.class

Here is our player comes to the ring. DiffUtil.Callback is an abstract class and it has 4 abstract methods and 1 method non-abstract method. Let explain them shortly.

DiffUtil.Callback Methods

getOldListSize() : It returns the size of the old list.

getNewListSize() : Returns the size of the new list;

areItemsTheSame(int oldItemPosition, int newItemPosition) : Called by the DiffUtil to decide whether two object represent the same Item.If your items have unique ids, this method should check their id equality.

areContentsTheSame(int oldItemPosition, int newItemPosition) : Checks whether two items have the same data.You can change its behavior depending on your UI. This method is called by DiffUtil only if areItemsTheSame returns true.

getChangePayload(int oldItemPosition, int newItemPosition) : If areItemTheSame return true and areContentsTheSame returns false DiffUtil calls this method to get a payload about the change. For my example I didn’t use payload object but if you want to use it you can go through this example.

MyDiffUtilCallback.java

Update method in my RecyclerViewAdapter

That’s all. We call dispactUpdatesTo(RecyclerView.Adapter) method and adapter will be notified about the change.

References

https://developer.android.com/reference/android/support/v7/util/DiffUtil.html

https://medium.com/@nullthemall/diffutil-is-a-must-797502bc1149#.x7kc55a69

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store