Ich bin es gewohnt, eine spezielle Ansicht in die Layoutdatei einzufügen, wie in der ListActivity
Dokumentation beschrieben , die angezeigt wird, wenn keine Daten vorhanden sind . Diese Ansicht hat die ID "android:id/empty"
.
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_data" />
Ich frage mich, wie das mit dem neuen gemacht werden kann RecyclerView
.
setEmptyView()
Methode gegen eineRecyclerView
...setEmptyView()
auch Nachteil. Beim Laden von Daten wollten wir keine leere Ansicht anzeigenListView
, aber das tat es. Also mussten wir eine Logik implementieren. Derzeit verwende ich stackoverflow.com/a/48049142/2914140 .Antworten:
Fügen Sie in demselben Layout, in dem das definiert ist
RecyclerView
, Folgendes hinzuTextView
:Beim
onCreate
oder beim entsprechenden Rückruf prüfen Sie, ob der Datensatz, der Sie speist,RecyclerView
leer ist. Wenn der Datensatz leer ist,RecyclerView
ist auch der Datensatz leer. In diesem Fall wird die Meldung auf dem Bildschirm angezeigt. Wenn nicht, ändern Sie die Sichtbarkeit:quelle
Für meine Projekte habe ich diese Lösung (
RecyclerView
mitsetEmptyView
Methode) gemacht:Und Sie sollten es anstelle der
RecyclerView
Klasse verwenden:und
quelle
Hier ist eine Lösung, bei der nur ein benutzerdefinierter Adapter mit einem anderen Ansichtstyp für die leere Situation verwendet wird.
quelle
getItemCount()
sollte ein Oneliner sein, aber hier haben wir eine nicht trivialeif
mit etwas versteckter Logik. Diese Logik erscheint auch unangenehmgetItemViewType
und Gott weiß, wo sonstIch benutze ViewSwitcher
Im Code überprüfen Sie den Cursor / Datensatz und wechseln die Ansichten.
Sie können auch Animationen einstellen, wenn Sie dies mit ein paar Codezeilen wünschen
quelle
Da ist Kevins Antwort nicht vollständig.
Dies ist die korrektere Antwort, wenn Sie
RecyclerAdapter
s verwendennotifyItemInserted
undnotifyItemRemoved
den Datensatz aktualisieren. Siehe die Kotlin-Version, die ein anderer Benutzer unten hinzugefügt hat.Java:
Kotlin
quelle
RVEmptyObserver
Anstatt eine benutzerdefinierte zu verwenden
RecyclerView
, ist das Erweitern vonAdapterDataObserver
eine einfachere Lösung, mit der Sie eine benutzerdefinierte festlegen könnenView
, die angezeigt wird, wenn die Liste keine Elemente enthält:Anwendungsbeispiel:
Klasse:
quelle
checkIfEmpty()
inonChanged()
undonItemRangeInserted()
getItemViewType
Überprüfen Sie auf dem Adapter , ob der Adapter 0 Elemente enthält, und geben Sie in diesem Fall einen anderen viewType zurück.onCreateViewHolder
Überprüfen Sie dann bei Ihrer Überprüfung, ob der viewType derjenige ist, den Sie zuvor zurückgegeben haben, und blasen Sie eine andere Ansicht auf. In diesem Fall eine Layoutdatei mit dieser TextansichtBEARBEITEN
Wenn dies immer noch nicht funktioniert, können Sie die Größe der Ansicht programmgesteuert wie folgt festlegen:
Und dann, wenn Sie Ihre Ansicht aufblasen, rufen Sie an:
quelle
onCreateViewHolder
wenn meine Daten - Set istnull
oder leer , da ich zurückkehren müssen , um0
ingetItemCount
.android:layout_gravity="center"
undandroid:layout_height="match_parent"
für die übergeordnete Recycler-Ansicht.android:layout_height="match_parent"
. Die Zeile wird jedoch nicht auf die Bildschirmhöhe erweitert.Hier ist meine Klasse zum Anzeigen der leeren Ansicht, zum Wiederholen der Ansicht (wenn das Laden der API fehlgeschlagen ist) und zum Laden des Fortschritts für
RecyclerView
activity_xml
Die Quelle ist hier https://github.com/PhanVanLinh/AndroidRecyclerViewWithLoadingEmptyAndRetry
quelle
Verwenden Sie AdapterDataObserver in der benutzerdefinierten RecyclerView
Kotlin:
RecyclerViewEnum.kt
RecyclerViewEmptyLoadingSupport.kt
layout.xml
Verwenden Sie in der Aktivität Folgendes:
quelle
StringDef
oderIntDef
AnmerkungenIch fügte hinzu
RecyclerView
und AlternativeImageView
zuRelativeLayout
:und dann in
Adapter
:quelle
mRecyclerView
in dieAdapter
Eine weitere Möglichkeit besteht darin,
addOnChildAttachStateChangeListener
die Handles zu verwenden, in denen untergeordnete Ansichten angezeigt / ausgeblendet werdenRecyclerView
.quelle
Nur für den Fall, dass Sie mit einem FirebaseRecyclerAdapter arbeiten, funktioniert dieser Beitrag als Charm https://stackoverflow.com/a/39058636/6507009
quelle