Java – Use multiple views and datasets in RecyclerView

Use multiple views and datasets in RecyclerView… here is a solution to the problem.

Use multiple views and datasets in RecyclerView

I have the following adapter that populates RecyclerView with a CardView item that contains a TextView. It populates these TextViews with data from a String array. However, now that I want to add another TextView to my CardViews and populate it with a separate array of data, I wonder how best to achieve this :

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private String[] mDataset;

public static class ViewHolder extends RecyclerView.ViewHolder {

public TextView mTextView;
    public ViewHolder(View itemView) {
        super(itemView);
        mTextView = (TextView)itemView.findViewById(R.id.grade);
    }
}

public RecyclerAdapter(String[] myDataset) {
    mDataset = myDataset;
}

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

View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_item, parent, false);

ViewHolder vh = new ViewHolder(v);

return vh;
}

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

holder.mTextView.setText(mDataset[position]);

}

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

Thanks as always for all the help!

Solution

Simply add another TextView or any other View to your CardLayout XML R.layout.card_item

And then

public TextView mTextView;
public TextView mTextView1;
public TextView mTextView2;
public TextView mTextView3;

public ViewHolder(View itemView) {
    super(itemView);
    mTextView = (TextView)itemView.findViewById(R.id.grade);
    mTextView1 = (TextView)itemView.findViewById(R.id.grade1);
    mTextView2 = (TextView)itemView.findViewById(R.id.grade2);
    mTextView3 = (TextView)itemView.findViewById(R.id.grade3);
  }

Finally, set the data to all the desired TextViews

    @Override
 public void onBindViewHolder(ViewHolder holder, int position) {
     holder.mTextView.setText("String");
     holder.mTextView1.setText("String");
     holder.mTextView2.setText("String");
     holder.mTextView3.setText("String");
    }

Related Problems and Solutions