Java 如何在RecyclerView上设置onClickListener

Java 如何在RecyclerView上设置onClickListener,java,android,android-recyclerview,onclicklistener,Java,Android,Android Recyclerview,Onclicklistener,我有一个简单的问题,我不能在recyclerview上设置onClickListener,我不想在recyclerview的项目上设置onClickListener,只是recyclerview本身,我尝试了普通的方法,但没有成功 (我试图在父布局上设置onClickListener,但奇怪的是,由于在recyclerview:|上设置了LinearLayoutManager,它无法工作) 这是我的密码: mRecyclerView.setOnClickListener(new View.OnC

我有一个简单的问题,我不能在recyclerview上设置onClickListener,我不想在recyclerview的项目上设置onClickListener,只是recyclerview本身,我尝试了普通的方法,但没有成功

(我试图在父布局上设置onClickListener,但奇怪的是,由于在recyclerview:|上设置了LinearLayoutManager,它无法工作)

这是我的密码:

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

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();
}
公共类RecyclerAdapter扩展了RecyclerView.Adapter{ 私人名单信息; 公共静态类ViewHolder扩展了RecyclerView.ViewHolder{ 私有文本视图txtSender; 私有文本视图txtMessage; 公共视图持有者(视图v){ 超级(五); txtSender=(TextView)v.findViewById(R.id.txtSender); txtMessage=(TextView)v.findViewById(R.id.txtText); } } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ View inflatedView=LayoutInflater.from(parent.getContext()) .充气(R.layout.recyclerview\u item\u行,父项,false); 返回新的视图支架(充气视图); } 公共回收适配器(列出消息){ M消息=消息; } @凌驾 公共无效onBindViewHolder(ViewHolder,int位置){ Message msg=mMessage.get(位置); holder.txtssender.setText(msg.getSender()); holder.txtMessage.setText(msg.getmessage()); } @凌驾 public int getItemCount(){ 返回mMessage.size(); }
根据您的需要,您需要修改
R.layout.recyclerview\u item\u row
。使用android
LinearLayout
TextView
R.id.txtSender
R.id.txtText
)放在其中

按如下所示修改您的
ViewHolder

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);
}
}
如下所示修改您的
onBindViewHolder

@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
    }
});
}

发布您的适配器代码…您是否尝试过将其嵌入FrameLayout并在FrameLayout上设置侦听器?好吧,这段代码应该可以工作,但这似乎是一件奇怪的事情,因为行视图仍将使用touch事件。@rafsanahmad007这里是您的主页are@ifiok它不起作用:(谢谢,但我不需要项目的onClickListener,项目之间有空格,我需要覆盖整个屏幕整个屏幕意味着覆盖单行点击还是什么?对不起,我的英语不太好,所以我不太理解单行点击的意思,这是我的问题:我想要一个onClickListener在屏幕上的任何地方,我有2个choices,首先为RecyclerView或父布局(根布局)设置OnClickListener,我尝试了这两种方法,但都失败了,我不知道为什么,我只知道设置layoutmanager会在ClickListener工作时停止根布局。您一定看到了
ListView
中有两个单击侦听器,
setOnClickListener
在调用ListView时调用另一个
setOnItemClickListener
d当listview项被单击时。您希望您的<代码>回收视图采用哪种行为?如果您想要第二种行为,那么我的答案是您的解决方案。我想要第一种