2017-02-01 9 views
1

ボタンのonClickListenerをRecyclerView行の内側に入れようとしていますが、RecyclerView行のクリックリスナーもあります。これはRecyclerViewの行のButtonをクリックすると問題になりますところで、ここで私は断片を使用しています。ハンドルボタンRecyclerViewのListenerをクリック

これは、これはの親要素を取得し、ボタン

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

代わりの全体のリサイクルビューのクリックイベントを実装するためのViewHolderある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); 
} 

}

ですあなたがBTN_A、BTN_B、BTN_C、

のために追加したように、リサイクルビューの子供レイアウト

たとえば、リサイクラビューの子レイアウトの親要素(子レイアウトの一番上のビュー)が相対レイアウトの場合add onclick event relativelayout

関連する問題