RecyclerView itmeクリックイベントと長押しイベント、onItemLongClick、onItemClick


RecyclerViewはlistviewよりも強力であることはよく知られていますが、現在では多くのandroid開発者がlistviewの代わりにRecyclerViewを使用しています.しかし、使用を開始したばかりの頃は、RecyclerViewがクリックイベント(onItemClick)とロングクリックイベント(onItemLongClick)を持っていないという問題に直面していると信じていました.
ここで自分の書き方を共有し、接触したばかりの開発者の一部に役立つことを望んでいます.
1つ目の方法:
OnItemTouchListenerでクリックインタフェースをカスタマイズします.次のように
/**
 *        
 */
public class RecyclerViewClickListener implements RecyclerView.OnItemTouchListener {

    // GestureDetectorCompat        
    private GestureDetectorCompat mGestureDetector;
    private OnItem2ClickListener mListener;

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

        //  
        void onItemLongClick(View view, int position);
    }

    public RecyclerViewClickListener(Context context, final RecyclerView mRecyclerView, OnItem2ClickListener listener) {
        this.mListener = listener;
        // SimpleOnGestureListener             
        mGestureDetector = new GestureDetectorCompat(context, new GestureDetector.SimpleOnGestureListener() {
            //    
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                Log.i("mGestureDetector","onSingleTapUp");
                View childViewUnder = mRecyclerView.findChildViewUnder(e.getX(), e.getY());
                if (childViewUnder != null && mListener != null) {
                    mListener.onItemClick(childViewUnder, mRecyclerView.getChildLayoutPosition(childViewUnder));
                    return true;
                }
                return false;
            }

            //    
            @Override
            public void onLongPress(MotionEvent e) {
                Log.i("mGestureDetector","onLongPress");
                View childView = mRecyclerView.findChildViewUnder(e.getX(),e.getY());
                if(childView != null && mListener != null){
                    mListener.onItemLongClick(childView,mRecyclerView.getChildLayoutPosition(childView));
                }
            }
        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        //         mGestureDetector   
        if(mGestureDetector.onTouchEvent(e)){
            return true;
        }else
            return false;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }

Activity統合インタフェースOnItem 2 clickListenerで、メソッドを実装します.
public class MessageFragment extends BaseFragment implements RecyclerViewClickListener.OnItem2ClickListener{
  @Override
    public void onItemClick(View view, int postion) {

    }

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

    }

}
 
第2種
adapter種実装インタフェースの具体的な実装では、私の以前の別の文章を見ることができます.
https://blog.csdn.net/qq_36355271/article/details/86242606 
//activityはadapterのインタフェースを実現することで制御効果を達成した.