In onCreateViewHolder you must inflate the item markup and create an AdapterHolder from it. Notice how and where the view initialized.
onBindViewHolder comes your AdapterHolder , created in onCreateViewHolder . In it you need to fill with data each item in the list.
Here is my first adapter when I started trying RecyclerView . I think everything will become clear. If not, write comments. Here I am downloading data from the database. Something of type SimpleCursorAdapter .
public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.AdapterHolder> { Cursor cursor; public class AdapterHolder extends RecyclerView.ViewHolder { TextView time, date, text; CardView card; AdapterHolder(View itemView) { super(itemView); time = (TextView)itemView.findViewById(R.id.note_item_time); date = (TextView)itemView.findViewById(R.id.note_item_date); text = (TextView)itemView.findViewById(R.id.note_text); card = (CardView)itemView; } } NotesAdapter(Cursor cursor) { this.cursor = cursor; } @Override public void onAttachedToRecyclerView(RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); } @Override public AdapterHolder onCreateViewHolder(ViewGroup viewGroup, int p2) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.note_item, viewGroup, false); AdapterHolder pvh = new AdapterHolder(v); return pvh; } @Override public void onBindViewHolder(final AdapterHolder holder, final int position) { cursor.moveToPosition(position); final Long id = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID)); String date = cursor.getString(cursor.getColumnIndex(Database.NOTES_DATE)); String time = cursor.getString(cursor.getColumnIndex(Database.NOTES_TIME)); final String color = cursor.getString(cursor.getColumnIndex(Database.NOTES_COLOR)); final String text = cursor.getString(cursor.getColumnIndex(Database.NOTES_TEXT)); holder.time.setText(time); holder.date.setText(date); holder.text.setText(text); holder.card.setCardBackgroundColor(Color.parseColor(color)); } @Override public int getItemCount() { return cursor.getCount(); } }
For convenience, make the bind(int position) method in the holder and call it in onBindViewHolder
holder.bind(position);
And inside the bind method they write the logic of data binding. It is, indeed, effective.
People people = peoples.get(position); textview_name.setText(people.name); //etc..
To set up an onItemClickListener listener like in ListView :
1) The root markup element (which contains everything else we write
android:clickable="true" android:focusable="true" <!-- Π½Π΅ Π·Π½Π°Ρ Π·Π°ΡΠ΅ΠΌ --> android:background="?attr/selectableItemBackground" <!-- ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ -->
2) In the constructor of the holder set
itemView.setOnClickListener(this);
3) The holder itself inherits from the interface
public class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener
4) Implement the onClick(View v) method inside the holder
5) Create a listener variable in the adapter.
private OnItemClickListener listener;
6) Create an interface in the adapter
public interface OnItemClickListener { void onItemClick(View v); //ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π·Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΌΠΎΠ΄Π΅Π»Ρ //void onItemClick(People p); //ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ //void onItemClick(int position); }
7) Create a method in the adapter
public void setOnItemClickListener (OnItemClickListener listener) { this.listener = listener; }
8) In the onClick method (see step 4) we write
@Override public void onClick(View v) { switch(v.getId()) { case R.id.root_item_view: listener.onItemClick(v); //ΠΈΠ»ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ //listener.onItemClick(peoples.get(getAdapterPosition())); //ΠΈΠ»ΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡ //listener.onItemClick(getAdapterPosition()); break; case ... case ... } }
Now, in the activity / fragment, you can write
RecyclerView rv = (RecyclerView) findViewById(...); rv.setLayoutManager(new Linear/*Grid/Staggered*/LayoutManager()); RecyclerAdapter adapter = new RecyclerAdapter(datalist); adapter.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(View v) { //Π²Π°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° } }); rv.setAdapter(adapter);
ViewHolder's. Here in this book is described in detail why they are needed. - post_zeew