Adapter for Recyclerview has to know about the view. For this purpose we use getItemViewType
.By getting view type we can add any view to the recyclerview.
public class MainRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final static int ADD_VIEW_HOLDER = 0;
private final static int EMPTY_VIEW_HOLDER = 1;
public List<DataList> mDrinkItems;
@Override
public int getItemViewType(int position) {
if (position== mDrinkItems.size()-1)
return EMPTY_VIEW_HOLDER;
else
return ADD_VIEW_HOLDER;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
switch (viewType){
case ADD_VIEW_HOLDER:
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.li_main_content,parent,false);
return new MainItemHolder(view);
case EMPTY_VIEW_HOLDER:
View EMPTYView= LayoutInflater.from(parent.getContext()).inflate(R.layout.li_EMPTY_action,parent,false);
return new EMPTYViewItemHolder(EMPTYView);
default:
return null;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
int size= mDrinkItems.size();
switch (getItemViewType(position)){
case ADD_VIEW_HOLDER:
((MainItemHolder)holder).bindData(mDrinkItems.get(position),position,size);
break;
case EMPTY_VIEW_HOLDER:
((EMPTYViewItemHolder)holder).bindData(mDrinkItems.get(position),position,size);
break;
}
}
@Override
public int getItemCount() {
return mDrinkItems.size();
}
public void setData(List<DailyConsumption> mlist) {
this.mDrinkItems = mlist;
notifyDataSetChanged();
}
When adding data to list to set adapter you get the last index of list to set empty view.
List<DataList> mList = new ArrayList<>();
mList.add(mList.size(),new DataList(// whatever you want to add));