Reputation: 487
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
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
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
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
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