In our app we have list of messages. We are switching to RecyclerView.
Our messages can consist from texts, images.
Sample message can look like this.
You can set listener into the adapter class. Here is the code :
ViewHolder class inside adapter :
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textViewFirstName;
ImageView imageViewProfile;
public MyViewHolder(View view) {
super(view);
textViewFirstName = (TextView) view.findViewById(R.id.txtName);
imageViewProfile = (ImageView) view.findViewById(R.id.imageViewProfile);
//setOnClick
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//check if the image you want to click should not invoke listener from activity/fragment
if (v.getId() != R.id.imageViewProfile) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(v, getPosition());
}
}
}
}
Set your imageView click in Adapter class onBindViewHolder :
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.textViewFirstName.setText(mArrayListTypeDetials.get(position).getFirstname());
//set imageView click here
holder.imageViewProfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//ImageView clicked
}
});
}
Creating interface inside Adapter class :
//interface for recyclerView item click
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
/*
method to set listener to the adapter ViewHolder item
*/
public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
this.mItemClickListener = mItemClickListener;
}
Setting interface from Activity/Fragment :
mAdapter.setOnItemClickListener(new Adapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Intent intent = new Intent(getActivity(), ABC.class);
startActivity(intent);
}
});