Ich schreibe meine erste App in Kotlin nach 3 Jahren Erfahrung mit Android. Nur verwirrt, wie itemClickListener mit einem RecyclerView in Kotlin zu verwenden.
Ich habe das Merkmal (edit: now interface) versucht, sehr Java-like
%Vor%Das schien sehr überflüssig, also habe ich den inneren Klassenansatz versucht:
%Vor%Und dann setzen Sie einfach den Klick-Listener des Adapters wie folgt:
%Vor%Aber ich bin immer noch nicht zufrieden damit, weil ich denke, dass es einen besseren, saubereren Weg geben könnte. Ich versuche im Wesentlichen Folgendes zu erreichen: RecyclerView onClick
Irgendwelche Vorschläge?
Beendet mit einer Variation der genehmigten Antwort
Definierte die Funktion in der Aktivität:
%Vor%Übergab die Funktion selbst an den Adapter:
%Vor%Erweiterung Funktion durch Loop in der genehmigten Antwort unten.
%Vor%Ich habe eine etwas andere Herangehensweise. Sie können eine Erweiterung für Ihren ViewHolder erstellen
%Vor%Dann benutze es in Adapter wie folgt
%Vor%Ich arbeite mit meinen Kollegen in der Bibliothek zusammen, die solche Erweiterungen anbietet.
Falls jemand nach einer Antwort no-frills sucht, habe ich Folgendes versucht - was der Lösung von AfzalivE sehr ähnlich ist:
In meiner Adapterklasse habe ich den clickListener
als Parameter übergeben. Bei onBindViewHolder
habe ich setOnClickListener
verwendet, um clickListener
aufzurufen und das Click-Ereignis zu behandeln.
MyAdapter.kt :
%Vor% Hinweis : Ich benötigte einen Verweis aus dem Container meines Listenelements (der Stammansicht), in diesem Fall containerView
Dann übergab ich mein Objekt als Parameter, ohne es erneut in einer Liste suchen zu müssen, und behandelte es direkt in meiner Activity
-Klasse, in dem Moment, als ich den Adapter einstellte:
MyActivity.kt :
%Vor%Aktualisieren
Wenn Sie die Position des angeklickten Elements benötigen, definieren Sie es einfach als Parameter für den Rückruf und senden Sie es später zurück. Beachten Sie die val clickListener: (MyObject, Int) -> Unit
unten:
MyAdapter.kt
%Vor% Dann übergeben Sie an onBindViewHolder()
die Position beim Aufruf der Callback-Methode:
Und bei MyActivity.kt müssen Sie die Art der Einstellung des Adapters ändern, damit Sie die Position ermitteln können. So:
%Vor%Ich denke, die eleganteste Lösung besteht darin, recyclingView diese Verantwortung zu übertragen und sie nicht anzusehen oder gar anzupassen.
Dafür brauchen wir:
In RecyclerView können Sie auf die aufgeblähte Ansicht innerhalb der Viewholder-Klasse klicken und sie über die onBindViewHolder Callback-Methode aufrufen, zum Beispiel:
%Vor%Sie können vom Adapter onBindViewHolder-Methode ... zum Beispiel aufrufen:
%Vor%Adapterkonstruktordeklaration
%Vor%Adapter :: onBindViewHolder
%Vor%Verwendung
%Vor% Grundsätzlich erhalten Sie das ItemObject als it
im Lambda-Argument.
Tags und Links android kotlin android-recyclerview