Skip to main content

Android RecyclerView Item Click Listener

RecyclerView doesn't have a method onItemClickListener to handle click events on RecyclerView's item. We will create a new class which will handle click events.

Refer this Android Recycler View to create recycler view and then follow these steps-
1. Create a new class RecyclerTouchListener and implement RecyclerView.OnItemTouchListener-
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) {

            }
        });
    }

    @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.getChildAdapterPosition(child));
        }
        return false;
    }

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

    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }

    public interface ClickListener{
        void onClick(View view, int position);
        void onLongClick(View view,int position);
    }
}
2. Open class which has recyclerView and type this code-
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(),
                recyclerView, new RecyclerTouchListener.ClickListener() {
            @Override
            public void onClick(View view, int position) {
                //Your code
            }

            @Override
            public void onLongClick(View view, int position) {
            }
        }));


Comments

  1. Everything is very open with a very clear explanation of the issues.

    It was really informative. Your website is extremely helpful.
    Thank you for sharing!

    ReplyDelete

Post a Comment

Popular Posts