Ich weiß, dass RecyclerView
die Funktionalität der alten ListView
und ersetzt hat GridView
. Ich suche ein sehr einfaches Beispiel, das ein minimales Raster-Setup mit zeigt RecyclerView
. Ich suche keine langen Erklärungen im Tutorial-Stil, nur ein minimales Beispiel. Ich stelle mir vor, dass das einfachste Raster, das das alte GridView nachahmt, aus folgenden Funktionen besteht:
- mehrere Zellen pro Zeile
- Einzelansicht in jeder Zelle
- reagiert auf Klickereignisse
Antworten:
Kurze Antwort
Für diejenigen , die bereits vertraut sind mit der Einrichtung ein
RecyclerView
eine Liste zu machen , ist die gute Nachricht , dass ein Gitter zu machen ist weitgehend gleich. Sie verwenden beim Einrichten einfach aGridLayoutManager
anstelle von a .LinearLayoutManager
RecyclerView
Wenn Sie mehr Hilfe benötigen, sehen Sie sich das folgende Beispiel an.
Vollständiges Beispiel
Das Folgende ist ein minimales Beispiel, das wie im Bild unten aussieht.
Beginnen Sie mit einer leeren Aktivität. Sie werden die folgenden Aufgaben ausführen , die hinzuzufügen
RecyclerView
Raster. Sie müssen lediglich den Code in jeden Abschnitt kopieren und einfügen. Später können Sie es an Ihre Bedürfnisse anpassen.Aktualisieren Sie Gradle-Abhängigkeiten
Stellen Sie sicher, dass die folgenden Abhängigkeiten in Ihrer App-
gradle.build
Datei enthalten sind:Sie können die Versionsnummern auf die aktuellsten aktualisieren .
Aktivitätslayout erstellen
Fügen Sie das
RecyclerView
Ihrem XML-Layout hinzu.activity_main.xml
Erstellen Sie ein Rasterzellenlayout
Jede Zelle in unserem
RecyclerView
Raster wird nur eine einzige habenTextView
. Erstellen Sie eine neue Layoutressourcendatei.recyclerview_item.xml
Erstellen Sie den Adapter
Sie
RecyclerView
benötigen einen Adapter, um die Ansichten in jeder Zelle mit Ihren Daten zu füllen. Erstellen Sie eine neue Java-Datei.MyRecyclerViewAdapter.java
Anmerkungen
GridView
und ist ein allgemeines Bedürfnis. Sie können diesen Code entfernen, wenn Sie ihn nicht benötigen.Initialisieren Sie RecyclerView in Aktivität
Fügen Sie Ihrer Hauptaktivität den folgenden Code hinzu.
MainActivity.java
Anmerkungen
ItemClickListener
, was wir in unserem Adapter definiert haben. Dies ermöglicht es uns, Zellklickereignisse in zu verarbeitenonItemClick
.Fertig
Das ist es. Sie sollten jetzt in der Lage sein, Ihr Projekt auszuführen und etwas Ähnliches wie das Bild oben zu erhalten.
Weiter geht's
Abgerundete Ecken
Automatisch passende Säulen
Weitere Studie
quelle
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
Obwohl ich Suragchs Antwort mag und schätze , möchte ich eine Notiz hinterlassen, da ich festgestellt habe, dass das Codieren des Adapters (
MyRecyclerViewAdapter
) zum Definieren und Offenlegen der Listener-MethodeonItemClick
nicht der beste Weg ist, da keine Klassenkapselung verwendet wird korrekt. Mein Vorschlag ist daher, den Adapter nur die Abhörvorgänge ausführen zu lassen (das ist sein Zweck!) Und diese von der Aktivität zu trennen, die den Adapter verwendet (MainActivity
). So würde ich die Adapterklasse einstellen:MyRecyclerViewAdapter.java
Bitte beachten Sie, dass die
onItemClick
jetzt definierte MethodeMyRecyclerViewAdapter
der Ort ist, an dem Sie Ihre Aufgaben für das empfangene Ereignis / die empfangene Aktion codieren möchten.Es ist nur eine kleine Änderung erforderlich, um diese Transformation abzuschließen: Die Aktivität muss nicht
MyRecyclerViewAdapter.ItemClickListener
mehr implementiert werden, da dies jetzt vollständig vom Adapter durchgeführt wird . Dies wäre dann die endgültige Änderung:MainActivity.java
quelle
Activity
. Denn nur den es Klick Zuhörer über die wissen können ,Activity
Ansichten und andereFragments
,Activities
etc. Der Adapter sendet nur Ereignisse obere Ebene klicken. Es sollte die SchnittstelleItemClickListener
mit so vielen Ereignissen haben, wie viele Ansichten des Ereignisadapters erzeugen können. Diese Lösung wurde noch früher geschrieben: stackoverflow.com/a/40563598/2914140 .Sie müssen Ihren recyclerview layoutmanager in den Gridlayout-Modus versetzen. Ändern Sie dazu einfach Ihren Code, wenn Sie Ihren RecyclerView LayoutManager einstellen möchten:
Hinweis: Ersetzen Sie die gewünschte Spaltenanzahl durch ### HELP ###
quelle