简体   繁体   English

RecyclerView:如何在ImageView上捕获onClick?

[英]RecyclerView: how to catch the onClick on an ImageView?

I have an ImageView in CardViews of my RecyclerView. 我在RecyclerView的CardViews中有一个ImageView。 I would like to catch the onClick on the ImageView, like I already did with the ListView. 我想抓住ImageView上的onClick,就像我已经使用ListView一样。 So, in the public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) I tried with: 所以,在public void onBindViewHolder(RecyclerView.ViewHolder holder,final int position)中我试过:

 myViewHolder.imageView.setClickable(true);
 myViewHolder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               Log.d("TEST", "Clicked");
            }

but this was totally ignored. 但这完全被忽略了。 The following code is working: 以下代码正在运行:

 myViewHolder.imageView.setImageResource(R.drawable.star_yellow);

What can I do? 我能做什么?

Here's what I do in my project. 这是我在项目中所做的事情。

  1. Have an interface class somewhere in your project: 在项目的某处有一个接口类:

     public interface RecyclerViewClickListener { void onRowClicked(int position); void onViewClicked(View v, int position); } 
  2. In your RecyclerView.Adapter class, add this interface as a field and pass it to adapter via constructor: 在RecyclerView.Adapter类中,将此接口添加为字段,并通过构造函数将其传递给适配器:

     public class YourRecAdapter extends RecyclerView.Adapter<YourRecAdapter.SimpleViewHolder>{ private RecyclerViewClickListener listener; public YourRecAdapter(RecyclerViewClickListener listener){ this.listener = listener; } public static class SimpleViewHolder extends RecyclerView.ViewHolder { public SimpleViewHolder(View itemView, final RecyclerViewClickListener listener) { super(itemView); // find view ids here itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(listener != null) listener.onRowClicked(getAdapterPosition()); } }); someViewholderView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(listener != null) listener.onViewClicked(v, getAdapterPosition()); } }); } } } 
  3. Implement the interface in your Activity / Fragment: 在Activity / Fragment中实现接口:

     public class YourFragment extends Fragment implements RecyclerViewClickListener { @Override public void onViewClicked(View v, int position) { if(v.getId == R.id.yourDesiredView){ // Do your stuff here } } @Override public void onRowClicked(int position) { // Clicked entire row } } 

在Viewholder类中,您可以设置OnClickListener,但是您需要另一个接口才能将OnClick寄存器传递回适配器(或者您的预期目标所在的位置)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM