12

I new to RecyclerView Selection library. I prepared RecyclerView to select multiple item just single tap. My problem is that all of the article and tutorial show that selection process start with long press.

How can i overwrite to start selection with single tap? Thanks.

I'm using implementation 'androidx.recyclerview:recyclerview-selection:1.0.0'

The tutorial,I tried..

amlwin
  • 4,059
  • 2
  • 15
  • 34

2 Answers2

21

After digging over weeks, I found working solution. According to 한로니

If you want single-tap to select, just override inSelectionHotspot(e: MotionEvent) to return true

object : ItemDetailsLookup.ItemDetails<Long>() {
        override fun getSelectionKey(): Long? {

            return itemId
        }

        override fun getPosition(): Int {
            return adapterPosition
        }

        override fun inSelectionHotspot(e: MotionEvent): Boolean {
            return true
        }

For more u can see on Here

amlwin
  • 4,059
  • 2
  • 15
  • 34
0

I think the best way to do this is you need to use below code to implement.

  recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new RecyclerItemClickListener.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
              // Add your selection code here...
            }
        }));

Below is RecyclerItemClickListener class.

package com.android.app;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {

    GestureDetector mGestureDetector;
    private OnItemClickListener mListener;

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }

    @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) {

    }

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

This is custom onItemClickListener for RecyclerView.

Nitish
  • 995
  • 7
  • 17
  • I'm so Sorry, @Nitish, coz.you may misunderstand on something. My topic is about [ReyclerViewSelection](https://developer.android.com/reference/androidx/recyclerview/selection/package-summary). Thank you! – amlwin Mar 12 '19 at 10:25
  • Ohh! Sorry, I will look into it when get a chance and you can use above also, in case if you want to do it directly (Without ReyclerViewSelection). Thanks – Nitish Mar 12 '19 at 11:25