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.
Gibt es eine Möglichkeit,
onClickListener
auf einemRecyclerView
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.
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.
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.
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.
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%Tags und Links android android-layout android-recyclerview recyclerview-layout onclicklistener