Milad
Milad

Reputation: 131

How to set onClickListener on RecyclerView

I have a simple problem that I can't set onClickListener on recyclerview , i don't want to set onClickListener on items of recyclerview , just the recyclerview itself , I tried the ordinary way and it didn't work

( i tried to set an onClickListener on the parent Layout but the strange things it doesn't work because of the LinearLayoutManager that i set on recyclerview :| )

here's my code :

mRecyclerView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("onClick","Clicked");
        }
    });

Adapter :

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
private List<Message> mMessage;

public static class ViewHolder extends RecyclerView.ViewHolder{
    private TextView txtSender;
    private TextView txtMessage;

    public ViewHolder(View v) {
        super(v);
        txtSender = (TextView) v.findViewById(R.id.txtSender);
        txtMessage = (TextView) v.findViewById(R.id.txtText);
    }

}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View inflatedView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.recyclerview_item_row, parent, false);
    return new ViewHolder(inflatedView);
}


public RecyclerAdapter(List<Message> messages) {
    mMessage = messages;
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Message msg = mMessage.get(position);
    holder.txtSender.setText(msg.getSender());
    holder.txtMessage.setText(msg.getmessage());
}

@Override
public int getItemCount() {
    return mMessage.size();
}

Upvotes: 2

Views: 1865

Answers (1)

Geek
Geek

Reputation: 1530

As per your need, you need to modify R.layout.recyclerview_item_row. Use a android LinearLayout put both of TextView(R.id.txtSender and R.id.txtText) inside that.

Modify your ViewHolder as below:

public static class ViewHolder extends RecyclerView.ViewHolder
{
private LinearLayout lvContainer;
private TextView txtSender;
private TextView txtMessage;

public ViewHolder(View v) {
    super(v);
    lvContainer = (LinearLayout) v.findViewById(R.id.lv_container); // R.id.lv_container this should be in your R.layout.recyclerview_item_row
    txtSender = (TextView) v.findViewById(R.id.txtSender);
    txtMessage = (TextView) v.findViewById(R.id.txtText);
}
}

Modify your onBindViewHolder as below

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Message msg = mMessage.get(position);
holder.txtSender.setText(msg.getSender());
holder.txtMessage.setText(msg.getmessage());
holder.lvContainer.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //Handle your click here
    }
});
}

Upvotes: 2

Related Questions