It is frowned upon by purists to use the method
recyclerView.findViewHolderForAdapterPosition(pos).itemView.performClick();
as it states in docs:
Return the ViewHolder for the item in the given position of the data set. Unlike {@link #findViewHolderForLayoutPosition(int)} this method takes into account any pending adapter changes that may not be reflected to the layout yet. On the other hand, if {@link Adapter#notifyDataSetChanged()} has been called but the new layout has not been calculated yet, this method will return null
since the new positions of views are unknown until the layout is calculated.
for exactly the reason that delaying with a thread is sometimes useful. Any call to notifyDataSetChanged() causes it to return null. Better to use the adapter method onBindViewHolder and check for position 0. Adjust for how you have set up your listener, the usual way is example here, created in ViewHolder constructor. Use an init variable to prevent it from being called again:
@Override
public void onBindViewHolder(FooAdapter.ViewHolder viewHolder, int position) {
//code
...
//do this last especially if you are using an animator
if(position == 0 && isInit) {
listener.onItemClick( viewHolder.itemView,0);
isInit =false;
}
}