-1

What I am trying to accomplish is to create a listener for the ImageView inside the row of RecyclerView.

This code is working already, but this is not the solution that I wanted to have, because you need to double click the ImageView before getting the desired result.

// 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) {}

}));

Any idea how to translate this into single click solution? Advice or even a single comment would help me a lot.

rolz
  • 80
  • 1
  • 6

3 Answers3

1

This is not the right way as one of our friend suggested onBindViewHolder is caleed again and again during scrolling so it is not the best practice to add listener there.

Best way is to add it on ViewHolder as I suggested. Check my answer above.

Add your imageView click listener in OnBindViewHolder method

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

}

0

Add your imageView click listener in OnBindViewHolder method

    @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
            }
        });
}
Abid Khan
  • 2,451
  • 4
  • 22
  • 45
0
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
//                }
//            });
        }
    }
`