Since you are using RecyclerView, follow this method to implement click event to RecyclerView element.
1. Create a listener interface class.
public interface ItemClickListener {
void onClick(View view, int position);
}
2. Declare item click listener in the adapter class
ItemClickListener clickListener;
3. Add an onClick listener to the constructor of ViewHolder and define the function inside the Viewholder class. Don't forget to implement
View.OnClickListener
public class MyViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener{
TextView name,number;
View circle;
public MyViewHolder(View itemView) {
super(itemView);
name=(TextView)itemView.findViewById(R.id.txtName);
number=(TextView) itemView.findViewById(R.id.txtNumber);
circle = itemView.findViewById(R.id.circle);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (clickListener != null) clickListener.onClick(view, getAdapterPosition());
}
}
4. Define click function inside the adapter
public void setClickListener(ItemClickListener itemClickListener) {
this.clickListener = itemClickListener;
}
5. Implement ItemClickListener on MainActivity
public class MainActivity extends Activity implements ItemClickListener
6. Define onClick() function in MainActivity
public void onClick(View view, int position) {
final Contact contact = contactList.get(position);
Intent intent = new Intent(MainActivity.this, DetailedActivity.class);
intent.putExtra("name",contact.getName());
}
7. Call adapter.Onclick
myAdapter.setClickListener(this);
I use Interface as the Callback to handle this case.
First, I create an interface class inside Adapter.
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
private List<ItemObject> itemList;
private Context context;
private ItemClickListener mItemClickListener;
public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
this.itemList = itemList;
this.context = context;
}
@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null);
RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
return rcv;
}
public void addItemClickListener(ItemClickListener listener) {
mItemClickListener = listener;
}
@Override
public void onBindViewHolder(RecyclerViewHolders holder, final int position) {
holder.countryName.setText(itemList.get(position).getName());
holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
holder.countryPhoto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(position);
}
}
});
}
@Override
public int getItemCount() {
return this.itemList.size();
}
//Define your Interface method here
public interface ItemClickListener {
void onItemClick(int position);
}
}
Then, let's the Activity or Fragment implement that Interface and add the listener.
public class MyFragment extends Fragment
implements RecyclerViewAdapter.ItemClickListener {
private List<ItemObject> mItemList;
...
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container,
final Bundle savedInstanceState) {
...
//Make sure mItemList not NULL
RecyclerViewAdapter adapter = new RecyclerViewAdapter(getContext(), mItemList);
//Add Item Click listener
adapter.addItemClickListener(this);
}
@Override
public void onItemClick(int position) {
Toast.makeText(.getContext(),"Click on item: " + position,Toast.LENGTH_SHORT).show();
}
}
Hope this will help!