Site icon C1CTech

Android RecyclerView OnItemClickListener Example

<p>If you’ve used a RecyclerView&comma; you may know that they don’t have a <span style&equals;"color&colon; &num;008000&semi;"><strong>setOnItemClickListener<&sol;strong><&sol;span> as ListView had&comma; so we have to create our own way to do it&period;<&sol;p>&NewLine;<p>There are many ways to achieve this&comma; but I will show you the way I usually do it&period; My mechanism consists of passing the listener as a parameter to the constructor and then assign it when I bind the data to the view in onBindViewHolder&period;<&sol;p>&NewLine;<p>You’ll first need an interface that specifies listener’s behavior&period; In this example&comma; there is a data class called Book&comma; so the click will return an item of that type&colon;<&sol;p>&NewLine;<pre>public interface OnItemClickListener &lbrace;&NewLine; void onItemClick&lpar;Book book&rpar;&semi;&NewLine;&NewLine;&rcub;<&sol;pre>&NewLine;<p>The constructor will receive an object that implements this interface&comma; along with the items to be rendered&colon;<&sol;p>&NewLine;<pre>public class BookAdapter extends RecyclerView&period;Adapter&lt&semi;BookAdapter&period;MyViewHolder&gt&semi; &lbrace;&NewLine;&NewLine;&NewLine; private List&lt&semi;Book&gt&semi; bookList&semi;&NewLine; private OnItemClickListener listener&semi;&NewLine;&NewLine; public BookAdapter&lpar;List&lt&semi;Book&gt&semi; bookList&comma; OnItemClickListener listener&rpar; &lbrace;&NewLine; this&period;bookList &equals; bookList&semi;&NewLine; this&period;listener &equals; listener&semi;&NewLine; &rcub;&NewLine;&NewLine;<&sol;pre>&NewLine;<p>Now&comma; in onBindViewHolder the ViewHolderwill receive the constructor in the custom bind method&colon;<&sol;p>&NewLine;<pre>&commat;Override&NewLine;public void onBindViewHolder&lpar;MyViewHolder holder&comma; int position&rpar; &lbrace;&NewLine; holder&period;bind&lpar;bookList&period;get&lpar;position&rpar;&comma; listener&rpar;&semi;&NewLine; &NewLine;&rcub;<&sol;pre>&NewLine;<h4><span style&equals;"color&colon; &num;000080&semi;"><strong>This is how this bind method looks&colon;<&sol;strong><&sol;span><&sol;h4>&NewLine;<pre>public void bind&lpar;final Book item&comma; final OnItemClickListener listener&rpar; &lbrace;&NewLine;&NewLine; authorName&period;setText&lpar;item&period;getAuthorName&lpar;&rpar;&rpar;&semi;&NewLine; bookName&period;setText&lpar;item&period;getBookName&lpar;&rpar;&rpar;&semi;&NewLine; imageView&period;setImageResource&lpar;item&period;getImageResource&lpar;&rpar;&rpar;&semi;&NewLine; itemView&period;setOnClickListener&lpar;new View&period;OnClickListener&lpar;&rpar; &lbrace;&NewLine;&NewLine; &commat;Override&NewLine; public void onClick&lpar;View v&rpar; &lbrace;&NewLine;&NewLine; listener&period;onItemClick&lpar;item&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; &rcub;&rpar;&semi;&NewLine;&rcub;&NewLine;<&sol;pre>&NewLine;<p>Use it whenever you need it by creating a new adapter and the listener that will implement the behaviour when an item is clicked&period; A simple example&colon;<&sol;p>&NewLine;<pre>&sol;&sol;<strong><span style&equals;"color&colon; &num;3366ff&semi;">setting custum onItemClickListener<&sol;span><&sol;strong>&NewLine;recyclerView&period;setAdapter&lpar;new BookAdapter&lpar;bookList&comma;new BookAdapter&period;OnItemClickListener&lpar;&rpar;&lbrace;&NewLine; &commat;Override&NewLine; public void onItemClick&lpar;Book book&rpar;&lbrace;&NewLine; Toast&period;makeText&lpar;getApplicationContext&lpar;&rpar;&comma; book&period;getBookName&lpar;&rpar;&plus;" "&plus;" book is Clicked"&comma; Toast&period;LENGTH&lowbar;LONG&rpar;&period;show&lpar;&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&rcub;&rpar;&rpar;&semi;&NewLine;&NewLine;<&sol;pre>&NewLine;<p>Take a look at the whole code of this adapter&period;<&sol;p>&NewLine;<&excl;-- WP QUADS Content Ad Plugin v&period; 2&period;0&period;98&period;1 -->&NewLine;<div class&equals;"quads-location quads-ad2" id&equals;"quads-ad2" style&equals;"float&colon;none&semi;margin&colon;0px&semi;">&NewLine;&NewLine;<&sol;div>&NewLine;&NewLine;<pre>package com&period;example&period;lenovo&period;recyclerview&period;adapter&semi;&NewLine;&NewLine;import android&period;support&period;v7&period;widget&period;RecyclerView&semi;&NewLine;import android&period;view&period;LayoutInflater&semi;&NewLine;import android&period;view&period;View&semi;&NewLine;import android&period;view&period;ViewGroup&semi;&NewLine;import android&period;widget&period;ImageView&semi;&NewLine;import android&period;widget&period;TextView&semi;&NewLine;import com&period;example&period;lenovo&period;recyclerview&period;R&semi;&NewLine;import com&period;example&period;lenovo&period;recyclerview&period;model&period;Book&semi;&NewLine;import java&period;util&period;List&semi;&NewLine;&NewLine;&NewLine;public class BookAdapter extends RecyclerView&period;Adapter&lt&semi;BookAdapter&period;MyViewHolder&gt&semi; &lbrace;&NewLine;&NewLine; private List&lt&semi;Book&gt&semi; bookList&semi;&NewLine; private OnItemClickListener listener&semi;&NewLine;&NewLine; public BookAdapter&lpar;List&lt&semi;Book&gt&semi; bookList&comma; OnItemClickListener listener&rpar; &lbrace;&NewLine; this&period;bookList &equals; bookList&semi;&NewLine; this&period;listener &equals; listener&semi;&NewLine; &rcub;&NewLine;&NewLine; public class MyViewHolder extends RecyclerView&period;ViewHolder &lbrace;&NewLine; public TextView authorName&comma; bookName&semi;&NewLine; public ImageView imageView&semi;&NewLine;&NewLine; public MyViewHolder&lpar;View view&rpar; &lbrace;&NewLine; super&lpar;view&rpar;&semi;&NewLine;&NewLine; authorName &equals; &lpar;TextView&rpar; view&period;findViewById&lpar;R&period;id&period;author&lowbar;name&rpar;&semi;&NewLine; bookName &equals; &lpar;TextView&rpar; view&period;findViewById&lpar;R&period;id&period;book&lowbar;name&rpar;&semi;&NewLine; imageView &equals; &lpar;ImageView&rpar; view&period;findViewById&lpar;R&period;id&period;img&lowbar;book&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; public void bind&lpar;final Book item&comma; final OnItemClickListener listener&rpar; &lbrace;&NewLine;&NewLine; authorName&period;setText&lpar;item&period;getAuthorName&lpar;&rpar;&rpar;&semi;&NewLine; bookName&period;setText&lpar;item&period;getBookName&lpar;&rpar;&rpar;&semi;&NewLine; imageView&period;setImageResource&lpar;item&period;getImageResource&lpar;&rpar;&rpar;&semi;&NewLine; itemView&period;setOnClickListener&lpar;new View&period;OnClickListener&lpar;&rpar; &lbrace;&NewLine; &commat;Override&NewLine; public void onClick&lpar;View v&rpar; &lbrace;&NewLine;&NewLine; listener&period;onItemClick&lpar;item&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine; &rcub;&rpar;&semi;&NewLine; &rcub;&NewLine; &rcub;&NewLine;&NewLine; &commat;Override&NewLine; public MyViewHolder onCreateViewHolder&lpar;ViewGroup parent&comma; int viewType&rpar; &lbrace;&NewLine; View itemView &equals; LayoutInflater&period;from&lpar;parent&period;getContext&lpar;&rpar;&rpar;&period;inflate&lpar;R&period;layout&period;book&lowbar;list&lowbar;row&comma; parent&comma; false&rpar;&semi;&NewLine; return new MyViewHolder&lpar;itemView&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; &commat;Override&NewLine; public void onBindViewHolder&lpar;MyViewHolder holder&comma; int position&rpar; &lbrace;&NewLine; holder&period;bind&lpar;bookList&period;get&lpar;position&rpar;&comma; listener&rpar;&semi;&NewLine;&NewLine;&NewLine; &rcub;&NewLine;&NewLine; &commat;Override&NewLine; public int getItemCount&lpar;&rpar; &lbrace;&NewLine; return bookList&period;size&lpar;&rpar;&semi;&NewLine; &rcub;&NewLine;&NewLine; public interface OnItemClickListener &lbrace;&NewLine; void onItemClick&lpar;Book book&rpar;&semi;&NewLine;&NewLine; &rcub;&NewLine;&rcub;<&sol;pre>&NewLine;&NewLine;

Exit mobile version