RecyclerView:如何在ImageView上捕获onClick? [英] RecyclerView: how to catch the onClick on an ImageView?

查看:144
本文介绍了RecyclerView:如何在ImageView上捕获onClick?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在RecyclerView的CardViews中有一个ImageView。
我想在ImageView上捕获onClick,就像我已经使用ListView一样。所以,在 public void onBindViewHolder(RecyclerView.ViewHolder holder,final int position)我试过:

I have an ImageView in CardViews of my RecyclerView. I would like to catch the onClick on the ImageView, like I already did with the ListView. So, in the public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) I tried with:

 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);

我该怎么办?

推荐答案

这是我在我的工作项目。

Here's what I do in my project.


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

  1. Have an interface class somewhere in your project:

public interface RecyclerViewClickListener {

    void onRowClicked(int position);
    void onViewClicked(View v, int position);
}


  • 在RecyclerView.Adapter类中,将此接口添加为字段并通过构造函数将其传递给适配器:

  • In your RecyclerView.Adapter class, add this interface as a field and pass it to adapter via constructor:

    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());
                    }
                });
            }
        }
    }
    


  • 实施界面在您的活动/片段中:

  • Implement the interface in your 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
       }
    }
    


  • 这篇关于RecyclerView:如何在ImageView上捕获onClick?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆