2017-02-01 2 views
1

Я пытаюсь использовать onClickListener для кнопки внутри моей строки RecyclerView, и у меня также есть прослушиватель кликов для моей строки RecyclerView, теперь проблема в том, что я нажимаю кнопку на строке RecyclerView, это также уволил прослушиватель кликов строки RecyclerView, кстати здесь я использую фрагмент.Handle Button click Listener в 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(); 
      } 
     }); 
    } 
} 

ответ

0

Вместо реализации событие щелчка для всей точки зрения ресайклера, получить родительский элемент дочерний макет представления recycler и добавить событие click для него, как вы добавили для BTN_A, BTN_B, BTN_C,

например, если родительский элемент дочернего макета представления recycler (самый верхний вид в макете ребенка) является относительной компоновкой, добавьте событие onclick для relativelayout