j jones
j jones

Reputation: 487

android- OnClickListener not work for views inside recycle adapter

I've a recycle view adapter , I've implement addOnItemTouchListener to listen for each row and it works fine .

But I have two buttons in one of my rows and I've set on OnClickListener for them but it's not triggered . this is my code :

holder.register.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ctx.startActivity(new Intent(ctx,Register.class));
                }
            });

I've set android clickable for my buttons but it didn't make any change :

 <TextView
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:clickable="true"
        android:textColor="#fff" />

How can I call on click listener for my buttons instead of recycle view TouchListener ?

Upvotes: 1

Views: 1137

Answers (4)

Hasmukh Kachhatiya
Hasmukh Kachhatiya

Reputation: 488

try this way and remove click event android:clickable="true" from xml file and add below code inside bindview holder

holder.detailimage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(ctx, MainActivity.class);
        ctx.startActivity(intent);
    }
});

Upvotes: 0

Kiru Gowda
Kiru Gowda

Reputation: 11

here is a snippet

// adaptor 
    public class youradaptor extends RecyclerView.Adapter<youradaptor.ViewHolder>
    {

    // create variable

    OnItemClickListener mOnItemClickListener;

    @Override
    public void onBindViewHolder(Holder holder, int position) 
    {
       holder.register.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) 
           {
               mOnItemClickListener.click(position);
           }
       });
    }

    //interface for Click-listener
    public interface OnItemClickListener
     {
       // method name which you can call in main class
       void click(int position);
     }
     public void setOnItemClickListener(OnItemClickListener onItemClickListener) 
     {
         mOnItemClickListener = onItemClickListener;
     }
}    

in the main class

youradaptorvarialble.setOnItemClickListener(new BrandProductGridAdapter.OnItemClickListener()
{
    @Override
    public void clcik(int position) 
    {
    // write you action here
    // enter code here
    }
});

Upvotes: 0

Bhuvanesh BS
Bhuvanesh BS

Reputation: 13627

First of all, as you said you have implemented TouchListener for each row. so your entire row listens to touch even, so another touch event in the same row gets affecting.

You need to override the onInterceptTouchEvent() for each child, otherwise, it will remain an onTouchEvent for the parent.

Better implement your onClick events in view holder itself. Use OnclickListener instead of TouchListener

Hope it helps :)

Upvotes: 1

Mehul Kabaria
Mehul Kabaria

Reputation: 6632

try below. remove android:clickable from xml. and try setOnClickListener

<TextView
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="1" 
        android:textColor="#fff" />

Upvotes: 0

Related Questions