RecyclerView itemClickListener in Kotlin

8

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%     
AfzalivE 03.04.2015, 01:19
quelle

7 Antworten

4

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.

    
Damian Petla 03.04.2015, 08:23
quelle
3

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:

%Vor%

Und bei MyActivity.kt müssen Sie die Art der Einstellung des Adapters ändern, damit Sie die Position ermitteln können. So:

%Vor%     
notapotato 29.06.2017 17:56
quelle
2

Sie könnten etwas wie:

versuchen %Vor%

und SAM-Konvertierung funktioniert einfach wie in Java 8, also benutze einfach ein Lambda:

%Vor%     
D3xter 03.04.2015 07:59
quelle
2

Ich denke, die eleganteste Lösung besteht darin, recyclingView diese Verantwortung zu übertragen und sie nicht anzusehen oder gar anzupassen.

Dafür brauchen wir:

1: Erstellen Sie die RecyclerItemClickListener-Datei

%Vor%

2: Erstellen / Hinzufügen von Erweiterungen für RecyclerView:

%Vor%

3: Und schließlich die Verwendung (ich nehme an, Sie verwenden Kotlinx)

%Vor%     
Maxime Jallu 15.02.2018 08:47
quelle
1

Meine Lösung ist wie eine Kombination der vorherigen mit einem sehr sauberen Anruf von der Aktivität.

KontaktAdapter:

%Vor%

KontaktAktivität:

%Vor%     
denwehrle 25.03.2018 20:40
quelle
0

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%     
rakesh rajput 30.06.2017 04:54
quelle
0

Adapterkonstruktordeklaration

%Vor%

Adapter :: onBindViewHolder

%Vor%

Verwendung

%Vor%

Grundsätzlich erhalten Sie das ItemObject als it im Lambda-Argument.

    
Lucas Montano 05.03.2018 22:17
quelle