【发布时间】:2017-06-18 12:40:47
【问题描述】:
我正在尝试将 onClickListener 用于 RecyclerView 行内的按钮,并且我的 RecyclerView 行也有单击侦听器,现在的问题是,如果我单击 RecyclerView 行上的按钮,它也会触发 RecyclerView 的单击侦听器行,顺便说一下,我使用的是片段。
这是 RecyclerView touchListener 的自定义类
public class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {
private GestureDetector gestureDetector;
private ClickListener clickListener;
public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) {
this.clickListener = clickListener;
gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
return true;
}
@Override
public void onLongPress(MotionEvent e) {
View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null) {
clickListener.onLongClick(child, recyclerView.getChildPosition(child));
}
}
});
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
clickListener.onClick(child, rv.getChildPosition(child));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
public static interface ClickListener {
void onClick(View view, int position);
void onLongClick(View view, int position);
}
}
这是按钮的 ViewHolder
public static class RecycleViewHolder extends RecyclerView.ViewHolder{
ImageButton BTN_B, BTN_A, BTN_C;
public RecycleViewHolder(View view){
super(view);
ItemImage = (ImageView) view.findViewById(R.id.item_item_image);
BTN_A = (ImageButton) view.findViewById(R.id.button_a);
BTN_B = (ImageButton) view.findViewById(R.id.button_b);
BTN_C = (ImageButton) view.findViewById(R.id.button_c);
BTN_B.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(CTX,"B Button Clicked"+getAdapterPosition(),Toast.LENGTH_SHORT).show();
}
});
BTN_A.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(CTX,"A Button Clicked"+getAdapterPosition(),Toast.LENGTH_SHORT).show();
}
});
BTN_C.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(CTX,"C Button Clicked"+getAdapterPosition(),Toast.LENGTH_SHORT).show();
}
});
}
}
【问题讨论】:
标签: android button android-recyclerview fragment