So erhalten Sie Klicks auf RecyclerView (NICHT die Kinder)

9

Gibt es eine Möglichkeit, onClickListener auf einem RecyclerView zu setzen?

Ich habe ein RecyclerView mit einigen Kindern darin und setze OnClickListener auf das Elternteil RecyclerView . Das onClick wird jedoch nicht ausgelöst, wenn ich auf diese Ansicht klicke. Siehe Beispielcode unten - wir möchten Klicks auf die Eltern, NICHT auf die Kinder bekommen. In diesem Szenario sind Klicks auf die Elemente nicht wichtig.

Ich habe versucht, setFocusable(false) , setClickable(false) und setOnClickListener(null) für die Kinder vergeblich zu machen. Auf jeden Fall glaube ich nicht, dass die Kinder Klicks von den Eltern stehlen, denn wenn ich auf den Bereich klicke, in dem keine Kinder sind, werden die Klicks auch nicht registriert.

%Vor%     
Patricia Li 07.07.2016, 23:07
quelle

3 Antworten

2
  

Gibt es eine Möglichkeit, onClickListener auf einem RecyclerView zu setzen?

Nein. Das heißt, Sie können ein OnClickListener festlegen, aber RecyclerView wird es nie aufrufen. RecyclerView fängt alle Berührungsereignisse ab, ruft aber nie performClick() auf, wodurch View seinen Listener aufruft.

Sie können jedoch ein OnClickListener mit einem OnTouchListener und einem GestureDetector simulieren. Für den Listener von GestureDetector können wir SimpleOnGestureListener verwenden und nur die Methode onSingleTapUp() implementieren.

%Vor%

Dann müssen wir nur die GestureDetector die MotionEvent s von OnTouchListener füttern und die Rückkehr überprüfen, um zu entscheiden, ob das Ereignis konsumiert werden soll, um Scrollen, Ziehen, etc. nicht zu stören.

%Vor%

Bitte beachten Sie, dass die obige Lösung nur mit einem "einfachen" RecyclerView funktioniert, wie in der Frage beschrieben und beschrieben. Wenn Sie eine umfangreichere Handhabung von Objekten verwenden, wie Ziehen und Ablegen oder Streichen, müssen wir unsere Gestenerkennung etwas weiter oben in der Touch-Ereigniskette handhaben.

Dafür können wir RecyclerView ableiten und die Erkennung in der dispatchTouchEvent() -Methode durchführen. Wenn ein einzelner Tap erkannt wird, rufen wir einfach performClick() auf, was die RecyclerView OnClickListener auslöst.

%Vor%

Benutze diese Unterklasse anstelle deines regulären RecyclerView und setze% code_de% wie normalerweise. Je nachdem, wie Sie dies instanziieren, sind möglicherweise zusätzliche Konstruktoren erforderlich.

    
Mike M. 08.07.2016, 01:02
quelle
1

Versuchen Sie, Ihre Recycler-Ansicht in einem Relaylayout oder Linearlayout oder FrameLayout einzufügen und setzen Sie den Click-Listener dann auf relaylayout / linearlayout / framelayout.

%Vor%

Jetzt:

%Vor%     
Nongthonbam Tonthoi 07.07.2016 23:13
quelle
-1

ein Klick-Ereignis auf RecycleView? versuche es so:

%Vor%     
Cgx 08.07.2016 02:21
quelle