0

I'm trying to add a button as the last item of my RecyclerView. I've already saw a few tutorials but I can't figure it out yet. I add items from my Main Class with an array list.

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

public Context context;
private List<Archivos> mDataset;

public MyAdapter(Context context, List<Archivos> myDataset) {
    this.context = context;
    this.mDataset = myDataset;
}

@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_item, parent, false);
    Log.d("VIVZ", "onCreateHolder called");
    return new MyViewHolder(v);
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    holder.mTextTitle.setText(mDataset.get(position).titulo);
    holder.mTextDescription.setText(mDataset.get(position).descripcion);
    holder.mTextType.setText(mDataset.get(position).type);
    holder.mImageView.setImageDrawable(mDataset.get(position).icon);
}

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

@Override
public int getItemViewType(int position) {
    return (position == mDataset.size()) ? R.layout.fr_signup : R.layout.card_item;
}

class MyViewHolder extends RecyclerView.ViewHolder implements RecyclerView.OnClickListener {
    private CardView mCardView;
    private TextView mTextTitle;
    private TextView mTextDescription;
    private TextView mTextType;
    private ImageView mImageView;

    private MyViewHolder(View v) {
        super(v);
        mCardView = v.findViewById(R.id.card_view);
        mTextTitle = v.findViewById(R.id.card_doc_tittle);
        mTextDescription = v.findViewById(R.id.card_doc_description);
        mTextType = v.findViewById(R.id.card_doc_type);
        mImageView = v.findViewById(R.id.iv_image);
        mCardView.setOnClickListener(this);
    }

}
halfer
  • 19,824
  • 17
  • 99
  • 186
JosCarrillo
  • 85
  • 1
  • 14
  • 1
    Possible duplicate of [RecyclerView header and footer](https://stackoverflow.com/questions/26585941/recyclerview-header-and-footer) – Tim Aug 02 '17 at 17:33
  • @TimCastelijns can you help me with this comment "Hi XXX isHeader and isFooter are not methods, they are variables you have in the items of your list. For example you have a class named MyItem and the constructor is public MyItem(Object myObject, boolean isHeader, boolean isFooter)" – JosCarrillo Aug 02 '17 at 17:43

2 Answers2

0

In below code add the additional line to show the button in your recyclerview last row, initialize the button in viewholder as ususal manner:

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
  holder.mTextTitle.setText(mDataset.get(position).titulo);
  holder.mTextDescription.setText(mDataset.get(position).descripcion);
  holder.mTextType.setText(mDataset.get(position).type);
  holder.mImageView.setImageDrawable(mDataset.get(position).icon);
  //To show button only in last row
   if(position = mDataset.size()-1)
     {
       holder.mButton.setText("OK");
     }
}
Viswa Sundhar
  • 121
  • 3
  • 16
0

I've edited your Adapter to include a footer, it's not the complete copy+paste solution, but there're a few TODO and comments with hints for you.

public class MyAdapter extends RecyclerView.Adapter {

public Context context;
private List<Archivos> mDataset;

public MyAdapter(Context context, List<Archivos> myDataset) {
    this.context = context;
    this.mDataset = myDataset;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    if(viewType == R.layout.card_item){
      View v = LayoutInflater.from(parent.getContext())
              .inflate(R.layout.card_item, parent, false);
      Log.d("VIVZ", "onCreateHolder called");
      return new MyViewHolder(v);
    } else{
       // TODO: create here a holder for the Footer, inflate fr_signup and return it
       Log.d("VIVZ", "onCreateFooterHolder called");
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {

    if(getItemViewType(position) == R.layout.card_item){
      MyViewHolder h = (MyViewHolder) holder;
      h.mTextTitle.setText(mDataset.get(position).titulo);
      h.mTextDescription.setText(mDataset.get(position).descripcion);
      h.mTextType.setText(mDataset.get(position).type);
      h.mImageView.setImageDrawable(mDataset.get(position).icon);
    } else {
      // TODO: cast holder to the ViewHolder that of the footer and set any values needed
    }
}

@Override
public int getItemCount() {
    return mDataset.size() + 1; // added here +1 for the footer
}

@Override
public int getItemViewType(int position) {
    return (position == mDataset.size()) ? R.layout.fr_signup : R.layout.card_item;
}

class MyViewHolder extends RecyclerView.ViewHolder implements RecyclerView.OnClickListener {
    private CardView mCardView;
    private TextView mTextTitle;
    private TextView mTextDescription;
    private TextView mTextType;
    private ImageView mImageView;

    private MyViewHolder(View v) {
        super(v);
        mCardView = v.findViewById(R.id.card_view);
        mTextTitle = v.findViewById(R.id.card_doc_tittle);
        mTextDescription = v.findViewById(R.id.card_doc_description);
        mTextType = v.findViewById(R.id.card_doc_type);
        mImageView = v.findViewById(R.id.iv_image);
        mCardView.setOnClickListener(this);
    }

}
Budius
  • 39,391
  • 16
  • 102
  • 144