RecyclerView:如何在ImageView上捕获onClick?

hel*_*ind 5 android imageview android-cardview android-recyclerview

我在RecyclerView的CardViews中有一个ImageView.我想抓住ImageView上的onClick,就像我已经使用ListView一样.所以,在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");
            }
Run Code Online (Sandbox Code Playgroud)

但这完全被忽略了.以下代码正在运行:

 myViewHolder.imageView.setImageResource(R.drawable.star_yellow);
Run Code Online (Sandbox Code Playgroud)

我能做什么?

Tom*_*cic 16

这是我在项目中所做的事情.

  1. 在项目的某处有一个接口类:

    public interface RecyclerViewClickListener {
    
        void onRowClicked(int position);
        void onViewClicked(View v, int position);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在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());
                    }
                });
            }
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在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
       }
    }
    
    Run Code Online (Sandbox Code Playgroud)