【问题标题】:Click Listeners to RecyclerView [duplicate]单击侦听器到 RecyclerView [重复]
【发布时间】:2019-02-20 13:15:33
【问题描述】:

我想要完成的是为 RecyclerView 行内的ImageView 创建一个侦听器。

这段代码已经可以工作了,但这不是我想要的解决方案,因为您需要双击ImageView才能获得所需的结果。

// row click listener
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), recyclerView, new RecyclerTouchListener.ClickListener() {

    @Override
    public void onClick(View view, final int position) {

        ImageView viewContent = (ImageView)view.findViewById(R.id.btnViewContent);
        ImageView deleteContent = (ImageView)view.findViewById(R.id.btnDeleteContent);

        viewContent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "VIEW CONTENT", Toast.LENGTH_SHORT).show();
            }
        });

        deleteContent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(), "DELETE CONTENT", Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    public void onLongClick(View view, int position) {}

}));

知道如何将其转化为单击解决方案吗?建议甚至是一条评论都会对我有很大帮助。

【问题讨论】:

  • 在适配器内添加点击监听
  • 在onbindviewholder的viewholder项中添加clicklistener
  • 如果你想点击行内的Imageview,那么只需在适配器类的onBindViewHolder方法中获取该imageview的点击事件。对于这个问题,你不必采取recyclerview的点击事件。跨度>

标签: java android android-recyclerview onitemclicklistener


【解决方案1】:

这不是我们的一位朋友建议的正确方法 onBindViewHolder 在滚动过程中一次又一次地被调用,因此在此处添加侦听器不是最佳做法。

最好的方法是按照我的建议将它添加到 ViewHolder 上。检查我上面的答案。

在 OnBindViewHolder 方法中添加你的 imageView 点击监听

@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {

    holder.btnClassAddCart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // Do what you want here
        }
    });

}

【讨论】:

    【解决方案2】:
    Then there is no need to implement recyclerView.addOnItemTouchListener ,  inside Viewholder just add clicklistener on the view(image) you want below is the example for reference.
    
     ` public static class HeaderViewHolder extends RootViewHolder {
    
            @BindView(R.id.cardview)
            CardView cardview;
            @BindView(R.id.main_container)
            LinearLayout main_container;
            @BindView(R.id.music_cardview)
            CardView music;
            @BindView(R.id.shabad_cardview)
            CardView shabadvaani;
            @BindView(R.id.news_cardview)
            CardView news;
            @BindView(R.id.donate_cardview)
            CardView donate;
            @BindView(R.id.bs_cardview)
            CardView bs;
            @BindView(R.id.bl_cardview)
            CardView bl;
            @BindView(R.id.bng_cardview)
            CardView bng;
    
            @BindView(R.id.more_cardview)
            CardView more;
    
            @BindView(R.id.vid_cardview)
            CardView vid;
    
            @BindView(R.id.medi_cardview)
            CardView medi;
    //
    //        @BindView(R.id.ama_cardview)
    //        CardView ama;
    
    
    
    
            public HeaderViewHolder(final View itemView,final OnItemClickListener mOnItemClickListener) {
                super(itemView);
                ButterKnife.bind(this, itemView);
                news.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    
                        if (mOnItemClickListener != null) {
                            mOnItemClickListener.openDrawer();
                        }
    
    
                        //Intent i= new Intent(ctx,);
                        //open drawer code
                    }
                });
    
                shabadvaani.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    
                        Intent i = new Intent(ctx, IndexActivity.class);
                        ctx.startActivity(i);
    
                    }
                });
    
    
                music.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    
                        Intent i = new Intent(ctx, MainActivity.class);
                        i.putExtra("slug","audiobhajan");
                        ctx.startActivity(i);
    
                        //open drawer code
                    }
                });
    
                more.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    
    //                    Intent i = new Intent(ctx, stayrocks.jambh.vani.auth.MainActivity.class);
    //                    ctx.startActivity(i);
    
                        if (mOnItemClickListener != null) {
                            mOnItemClickListener.openDrawer();
                        }
    
    
                        //open drawer code
                    }
                });
    
                bs.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent= new Intent(ctx, AmaActivity.class);
                        ctx.startActivity(intent);
    
                    }
                });
    
                bl.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    
                        Intent i = new Intent(ctx, ItemListActivity.class);
                        ctx.startActivity(i);
                        //open drawer code
                    }
                });
    
                bng.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    //                    String appPackage = "com.my.bishnoi.nextgen";
    //                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackage));
    //                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        Intent intent= new Intent(ctx, WallpaperActivity.class);
                        ctx.startActivity(intent);
                        //open drawer code
                    }
                });
    
                medi.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    //                    String appPackage = "com.my.bishnoi.nextgen";
    //                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackage));
    //                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        Intent intent= new Intent(ctx, stayrocks.jambh.vani.activities.jyot.MainActivity.class);
                        ctx.startActivity(intent);
                        //open drawer code
                    }
                });
    
                vid.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
    //                    String appPackage = "com.my.bishnoi.nextgen";
    //                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackage));
    //                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        Intent intent= new Intent(ctx, VideoListDemoActivity.class);
                        ctx.startActivity(intent);
                        //open drawer code
                    }
                });
    
    //            ama.setOnClickListener(new View.OnClickListener() {
    //                @Override
    //                public void onClick(View v) {
    ////                    String appPackage = "com.my.bishnoi.nextgen";
    ////                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackage));
    ////                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    //                    Intent intent= new Intent(ctx, AmaActivity.class);
    //                    ctx.startActivity(intent);
    //                    //open drawer code
    //                }
    //            });
            }
        }
    `
    

    【讨论】:

      【解决方案3】:

      在 OnBindViewHolder 方法中添加你的 imageView 点击监听

          @Override
          public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
      
              holder.imageView.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      // Do what you want here
                  }
              });
      }
      

      【讨论】:

        猜你喜欢
        • 2017-11-09
        • 2017-06-18
        • 2018-12-19
        • 2012-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 1970-01-01
        相关资源
        最近更新 更多