Excellent answer by @reaz-murshed shared here . But I dont like ththe part where datasize is added with +1 and returning Footer View if the end is reached.
It tells that every last element is a Footer View and I had really hard time removing the footer view.
Instead did something like this for my case -
private List<RealResponse> addEmptyLoaderResponse(List<RealResponse> originalList){ if(originalList == null){ originalList= new ArrayList<>(); } originalList.add(new EmptyRealResponse()); return originalList; } private class EmptyRealResponse extends RealResponse{ /**Just an Empty class as placeholder for loader at Footer View * */ } public void setItems(List<InconcurPostResponse> items) { this.items = addEmptyLoaderResponse(items); } @Override public int getItemCount() { return items.size(); } @Override public int getItemViewType(int position){ if(this.items.get(position) instanceof EmptyRealResponse){ return ViewTypes.FOOTER_VIEW_TYPE.getViewType(); } return super.getItemViewType(position); } This is way cleaner for me and It loads actual Object into Recycler View. Plus I did get the benefit of removing the Footer View when I dont need it Or If I want to add more Placeholder Footer View.