You have a dispatchUpdatesTo(ListUpdateCallback) method.
So you can just implement a ListUpdateCallback , which gives you the first element inserted
class MyCallback implements ListUpdateCallback { int firstInsert = -1; Adapter adapter = null; void bind(Adapter adapter) { this.adapter = adapter; } public void onChanged(int position, int count, Object payload) { adapter.notifyItemRangeChanged(position, count, payload); } public void onInserted(int position, int count) { if (firstInsert == -1 || firstInsert > position) { firstInsert = position; } adapter.notifyItemRangeInserted(position, count); } public void onMoved(int fromPosition, int toPosition) { adapter.notifyItemMoved(fromPosition, toPosition); } public void onRemoved(int position, int count) { adapter.notifyItemRangeRemoved(position, count); } }
and then just scroll through the RecyclerView manually
myCallback.bind(adapter) adapter.setItems(itemList); diff.dispatchUpdatesTo(myCallback); recycler.smoothScrollToPosition(myCallback.firstInsert);
source share