【问题标题】:How to set onClickListener on RecyclerView如何在 RecyclerView 上设置 onClickListener
【发布时间】:2017-04-26 20:02:36
【问题描述】:

我有一个简单的问题,我不能在 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();
}

【问题讨论】:

  • 发布您的适配器代码...
  • 您是否尝试过将其嵌入 FrameLayout 并在 FrameLayout 上设置监听器?
  • 好吧,这段代码应该可以工作,但这样做似乎很奇怪,因为行视图仍然会消耗触摸事件。
  • @rafsanahmad007 你在这里
  • @ifiok 它不起作用:(

标签: java android android-recyclerview onclicklistener


【解决方案1】:

根据您的需要,您需要修改R.layout.recyclerview_item_row。使用 android LinearLayoutTextView(R.id.txtSenderR.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
    }
});
}

【讨论】:

  • 谢谢,但我不需要项目的 onClickListener ,项目之间有空格,我需要覆盖整个屏幕
  • 全屏是指覆盖单行点击还是什么?
  • 对不起,我的英语不好,所以我不太明白单行点击的含义,这是我的问题:我想要一个 OnClickListener 在屏幕上的任何地方,我有 2 个选择,首先设置 OnClickListener对于 RecyclerView 或父布局(根布局),我都尝试了,但都失败了,我不知道为什么,我唯一知道的是设置 layoutmanager 会停止根布局 onClickListener 工作
  • 你一定见过ListView有两个点击监听器,setOnClickListener在listview被点击时调用另一个setOnItemClickListener在listview项目被点击时被调用。您希望RecyclerView 采取哪种行为?如果您想要第二种行为,那么我的答案就是您的解决方案。
  • 我要第一个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
相关资源
最近更新 更多