0

Avant de marquer cette question comme doublon, veuillez noter que j'ai regardé toutes les solutions à des questions similaires ici sur Stackoverflow et qu'elles n'ont pas fonctionné.Comment arrêter le détecteur de gestes d'appuyer longuement sur un seul robinet lorsque l'on clique sur un élément dans recyclerview?

Voici le processus dans lequel j'ai implémenté le détecteur de mouvement. Vous verrez que dans la classe privée qui étend GestureDetector.SimpleOnGestureListener, j'ai seulement créé du code pour un appui long, mais le code contenu dans onLongPress se déclenche également en un seul clic.

classe implémente OnItemTouchListsner voir le code ci-dessous

public class MyFragment extends Fragment implements RecyclerView.OnItemTouchListener 

Je crée une variable privée voir le code ci-dessous

private GestureDetectorCompat gestureDetector; 

Je cède gestureDetector à onCreateView voir le code ci-dessous

gestureDetector = new GestureDetectorCompat(getActivity().getApplicationContext(), new RecyclerViewOnGestureListener()); 

je mets en œuvre les méthodes nécessaires pour OnItemTouchListener voir le code ci-dessous

@Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
      gestureDetector.onTouchEvent(e); 
      return false; 
     } 

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

    } 

Je crée une classe privée pour l'auditeur geste voir le code ci-dessous

private class RecyclerViewOnGestureListener extends GestureDetector.SimpleOnGestureListener { 

      @Override 
      public void onLongPress(MotionEvent e) { 
       //code in here executes on single tap, but should only execute on long press 
       super.onLongPress(e); 
      } 
     } 

Répondre

0

Essayer impérieuses RecyclerView#requestDisallowInterceptTouchEvent et l'annuler, il .

+0

Merci pour votre aide. Je l'ai réparé :) C'était une bonne suggestion, mais n'a pas résolu le problème. voir ma réponse ... – HaloMediaz

0

Ce qui a causé problème

j'utilisais RecyclerItemClickListener (see link to github page) et à cause de cela, je ne pouvais pas utiliser longpress, comme le code dans LongPress nécessaire pour être exécutée à l'intérieur d'un fragment.

J'ai donc mon fragment implémenté OnItemTouchListener et défini recyclerview.addOnItemTouchListener(this). J'ai seulement inclus le code pour une longue pression dans mon fragment. J'avais également mis recyclerview.addOnItemTouchListener à RecyclerItemClickListener.

Cause du problème: Paramètre onItemTouchListener pour recyclerview deux fois.

Solution: Faites de RecyclerItemClickListener une classe interne.