0

私の学校プロジェクトでいくつか問題があります。私のRecyclerViewのOnItemClickは、その中にあるImageButtonをクリックするとトリガされます。子どものOnClickの前にRecyclerViewのOnItemClickトリガー

CODE

mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, mRecyclerView, new RecyclerItemClickListener.OnItemClickListener() { 
    @Override 
    public void onItemClick(View view, int position) { 
    viewComments(posts.get(position)); 
    } 

    @Override 
    public void onItemLongClick(View view, int position) { 

    } 
})); 

そしてここでRecyclerItemClickListenerのコードは次のとおりです。

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { 

    private OnItemClickListener mListener; 
    private GestureDetector mGestureDetector; 

    public interface OnItemClickListener { 
    void onItemClick(View view, int position); 

    void onItemLongClick(View view, int position); 
    } 

    public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) { 
    mListener = listener; 

    mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) { 
     View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); 

     if (childView.findViewById(R.id.btnRateUp).isPressed() || childView.findViewById(R.id.btnRateDown).isPressed()) { 
      return false; 
     } 

     return true; 
     } 

     @Override 
     public void onLongPress(MotionEvent e) { 
     View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); 

     if (childView != null && mListener != null) { 
      mListener.onItemLongClick(childView, recyclerView.getChildAdapterPosition(childView)); 
     } 
     } 
    }); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { 
    View childView = view.findChildViewUnder(e.getX(), e.getY()); 

    if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { 
     mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); 
    } 

    return false; 
    } 

    @Override 
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { 
    } 

    @Override 
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 
    } 
} 

これは

if(childView.findViewById(R.id.btnRateUp).isPressed() || childView.findViewById(R.id.btnRateDown).isPressed()) 

、私は子供がクリックを得ていたかどうかを検出するために思い付いたものですが、私はisPressed()メソッドがRecyclerVより長くかかることを認識しました。処理するにはOnItemClickを表示してください。コードはすぐにタップしないと機能しません。次のように

btnRateUpとbtnRateDownはImageButtonsであり、そのOnClickイベントがアダプターのonBindViewHolderで実装されています:

holder.getBtnRateUp().setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    doStuff(true); 
    } 
}); 

holder.getBtnRateDown().setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
    doStuff(false); 
    } 
}); 

答えて

0

私は、私は完全にそれをやっていた方法を変更することにより、問題を解決しました。続いてthisチュートリアル。

関連する問題