-1

I have a recyclerview that allows the user to add data into it rather than having a list already made. Now I want to add a Footer that always shows on the recyclerview even if its empty. My problem is that my recycler view is not showing the second layout

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {

private ArrayList<String> mDataSet;

private class VIEWS_TYPES{
    public static final int Normal=1;
    public static final int Footer =2;
}

public MainAdapter(ArrayList<String> mDataSet){
    this.mDataSet = mDataSet;
}

@Override
public MainAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View rowView;
    switch (viewType){
        case VIEWS_TYPES.Normal:
            rowView=LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_row,parent,false);
            break;
        case VIEWS_TYPES.Footer:
            rowView=LayoutInflater.from(parent.getContext()).inflate(R.layout.add_button_recyclerview,parent,false);
            break;
        default:
    }       rowView=LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_row,parent,false);

    return new ViewHolder(rowView);
}

@Override
public void onBindViewHolder(MainAdapter.ViewHolder holder, int position) {
    holder.mTitle.setText(mDataSet.get(position));

}

@Override
public int getItemViewType(int position) {
    return super.getItemViewType(position);
}

@Override
public int getItemCount() {
    return mDataSet.size();
}

I think I have to do something with my getItemViewType but I have no idea how to do it. I'm Also not sure if that's the only problem. Any help would be appreciated.

Kristofer
  • 77
  • 1
  • 8

1 Answers1

0

Change from this

@Override
public int getItemViewType(int position) {
    return super.getItemViewType(position);
}

to this:

@Override
public int getItemViewType(int position) {
     if (position < mDataSet.size() - 1) {
          // content
          return VIEWS_TYPES.Normal;
     } else {
          // footer
          return VIEWS_TYPES.Footer;
     }
}

and since you have mDataSet.size() + 1 (your footer row)

@Override
public int getItemCount() {
    return mDataSet.size() + 1;
}

Update the onBindViewHolder

 @Override
    public void onBindViewHolder(MainAdapter.ViewHolder holder, int position) {
if(mDataSet.size()<position)
        holder.mTitle.setText(mDataSet.get(position));
else
// it's code for footer

    }

You have to take two different ViewHolder for Content and Footer.

MJM
  • 4,870
  • 4
  • 22
  • 49
Tuấn Kiệt
  • 292
  • 3
  • 13