You must initialize the GestureDetectorCompat method in onCreateView() :
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.myfrag, container, false); detector = new GestureDetectorCompat(getActivity(), new RecyclerViewOnGestureListener()); recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerview); layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); recyclerView.addOnItemTouchListener(this); adapter = new MyAdapter(myData)); recyclerView.setAdapter(adapter); return rootView; }
RecyclerViewOnGestureListener is your own inner class extending SimpleOnGestureListener (which provides an empty implementation of OnGestureListener methods)
private class RecyclerViewOnGestureListener extends SimpleOnGestureListener { @Override public boolean onSingleTapConfirmed(MotionEvent e) { View view = recyclerView.findChildViewUnder(e.getX(), e.getY()); int position = recyclerView.getChildPosition(view);
Now look at the line (from the onCreateView() method):
recyclerView.addOnItemTouchListener(this);
In our case, 'this' has an OnItemTouchListener containing two methods that we need to implement:
@Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { detector.onTouchEvent(e); return false; } @Override public void onTouchEvent(RecyclerView rv, MotionEvent e) { }
Here is an explanation of what these methods mean: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.OnItemTouchListener.html
This is all you need to handle single clicks and long click events from RecyclerView .
wpiwonski Oct 23 '14 at 1:55 a.m. 2014-10-23 13:55
source share