java - 如何在 RecyclerView 上设置 onClickListener

标签 java android android-recyclerview onclicklistener

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

(我尝试在父布局上设置 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();
}

最佳答案

根据您的需要,您需要修改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
    }
});
}

关于java - 如何在 RecyclerView 上设置 onClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43643548/

相关文章:

java - 如何保护我的jsp页面不被直接访问

java - 潜在的空指针访问

Android Recycler Adapter 位置无法正常工作 : onClick handling doesn't work properly

java - 由于使用 java8 lambdas 时出现无效类型异常,Flink 无法运行我的应用程序

android - 当我将解析代码放入其中时,应用程序崩溃了

java - Android ListView : changing dataset and calling notifyDataSetChanged inside of getView

android - 使textview在recyclerView中展开

android - 在 fresco 中缓存 gif

android - Marshmallow(23) + RecyclerView(23.1.0) 项目移除后滚动会弄乱上面的内容 (notifyItemRemoved)

java - 设计一个模式来测试 RESTful 服务