android - 回收站 View : how to catch the onClick on an ImageView?

标签 android imageview android-recyclerview android-cardview

我的 RecyclerView 的 CardView 中有一个 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");
            }

但这完全被忽略了。以下代码有效:

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

我能做什么?

最佳答案

这是我在我的项目中所做的。

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

    public interface RecyclerViewClickListener {
    
        void onRowClicked(int position);
        void onViewClicked(View v, int position);
    }
    
  2. 在您的 RecyclerView.Adapter 类中,将此接口(interface)添加为字段并通过构造函数将其传递给适配器:

    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. 在您的 Activity/Fragment 中实现接口(interface):

    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
       }
    }
    

关于android - 回收站 View : how to catch the onClick on an ImageView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33264042/

相关文章:

java - 如何暂停和恢复动画?

java - 在 map 中执行removeAt时出现ArrayIndexOutOfBoundsException

android - RecyclerView 使用 notifyItemMoved() 破坏 View

android - 将更改后的图像发送到另一个 Android Activity

java - Spinner 不会在 webview 加载时消失 - android

android - 如何优化此引用语句 findViewById()

java - 从图库 Android 应用中拍照时 ImageView 不显示图像

android - 滚动时折叠工具栏和回收器 View 不会折叠

android - 尝试构建 ionic 应用程序并获取 ANDROID_HOME 消息

Android 和声音处理?