In RecyclerView
möchte ich eine leere Ansicht festlegen, die angezeigt wird, wenn der Adapter leer ist. Gibt es ein Äquivalent von ListView.setEmptyView()
?
android
android-recyclerview
recycler-adapter
Manish Mulimani
quelle
quelle
Antworten:
Mit der neuen Datenbindungsfunktion können Sie dies auch direkt in Ihrem Layout erreichen:
In diesem Fall müssen Sie nur eine Variable und einen Import zum Datenabschnitt Ihres XML hinzufügen:
quelle
Adapter
anstelle des Datensatzes und dessen VerwendunggetItemCount()
oder wickeln alles in einemViewModel
und Satzandroid:visibility
zuviewModel.getEmptyViewVisibility()
.Hier ist eine Klasse ähnlich der von @dragon born, aber vollständiger. Basierend auf diesem Kern .
quelle
setEmptyView
Methode hinzugefügt, die Sie aufrufen können, wann immer Sie die leere Ansicht definieren möchten. Lesen Sie dieListView.setEmptyView
Dokumentation, wenn es unklar ist, es ist die gleiche Idee.Die in diesem Link bereitgestellte Lösung scheint perfekt zu sein. Mithilfe von viewType wird ermittelt, wann emptyView angezeigt werden soll. Sie müssen keine benutzerdefinierte RecyclerView erstellen
Hinzufügen von Code über den obigen Link:
quelle
Ich würde einfach eine einfache Lösung bevorzugen, wie:
Lassen Sie Ihre RecyclerView in einem FrameLayout oder RelativeLayout mit einer TextView oder einer anderen Ansicht mit der Anzeige leerer Datennachrichten mit der Sichtbarkeit GONE standardmäßig GEGEN und wenden Sie dann in der Adapterklasse die Logik an
Hier habe ich eine Textansicht mit Nachricht ohne Daten
quelle
Versuchen Sie
RVEmptyObserver
:Es ist eine Implementierung von a
AdapterDataObserver
, mit der Sie einfach einView
als Standardleerlayout für Ihr Layout festlegen könnenRecylerView
. Auf diese Weise können Sie einen benutzerdefiniertenRecyclerView
Code problemlos verwenden , anstatt einen benutzerdefinierten Code zu verwenden und Ihr Leben zu erschweren:Anwendungsbeispiel:
Sie können den Code und die Beispielverwendung in einer tatsächlichen App hier sehen.
Klasse:
quelle
Meine Version basiert auf https://gist.github.com/adelnizamutdinov/31c8f054d1af4588dc5c
quelle
setVisibility
zu implementieren .Ich würde es vorziehen, diese Funktionalität in Recycler.Adapter zu implementieren
Fügen Sie bei Ihrer überschriebenen getItemCount-Methode dort leere Prüfcodes ein:
quelle
setVisibility()
aufgerufen wird. Sicher, Sie könnten einige Flags hinzufügen, um dies zu kompensieren, aber dann wird es komplexer.Wenn Sie weitere Status wie Ladezustand und Fehlerstatus unterstützen möchten, können Sie https://github.com/rockerhieu/rv-adapter-states auschecken . Andernfalls kann die Unterstützung der leeren Ansicht einfach mithilfe
RecyclerViewAdapterWrapper
von ( https://github.com/rockerhieu/rv-adapter ) implementiert werden . Der Hauptvorteil dieses Ansatzes besteht darin, dass Sie die leere Ansicht problemlos unterstützen können, ohne die Logik des vorhandenen Adapters zu ändern:Verwendung:
quelle
Ich habe
Folgendes behoben: Erstellt die Datei layout layout_recyclerview_with_emptytext.xml.
Erstellt EmptyViewRecyclerView.java
---------
EmptyViewRecyclerView emptyRecyclerView = (EmptyViewRecyclerView) findViewById (R.id.emptyRecyclerViewLayout);
emptyRecyclerView.addAdapter (mPrayerCollectionRecyclerViewAdapter, "Für die ausgewählte Kategorie gibt es kein Gebet.");
Datei layout_recyclerview_with_emptytext.xml
EmptyViewRecyclerView.java
quelle
so etwas könnte helfen
quelle
RecyclerView
wenn dasemptyView
sichtbar ist (und das Gegenteil). Lassen Sie sich bei Anruf müssencheckIfEmpty()
aufonItemRangeInserted()
undonItemRangeRemoved()
. Oh, und Sie hätten Ihre Quelle zitieren können: gist.github.com/adelnizamutdinov/31c8f054d1af4588dc5cIch denke, dass dies sowohl mit ErrorView als auch mit EmptyView https://gist.github.com/henrytao-me/2f7f113fb5f2a59987e7 vollständiger ist
quelle
Sie können den Text einfach auf malen,
RecyclerView
wenn er leer ist. Die folgende benutzerdefinierte Unterklasse unterstütztempty
,failed
,loading
, undoffline
Modi. Für eine erfolgreiche Kompilierung fügen SierecyclerView_stateText
Ihren Ressourcen Farbe hinzu.quelle
Aus meiner Sicht besteht die einfachste Möglichkeit, eine leere Ansicht zu erstellen, darin, eine neue leere RecyclerView mit einem Layout zu erstellen, das Sie als Hintergrund aufblasen möchten. Und dieser leere Adapter wird festgelegt, wenn Sie die Größe Ihres Datensatzes überprüfen.
quelle