Nur RecyclerView
in meinem Code implementiert , ersetzen ListView
.
Alles funktioniert gut. Die Daten werden angezeigt.
Es werden jedoch Fehlermeldungen protokolliert:
15:25:53.476 E/RecyclerView: No adapter attached; skipping layout
15:25:53.655 E/RecyclerView: No adapter attached; skipping layout
für den folgenden Code:
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Wie Sie sehen, habe ich einen Adapter für angeschlossen RecyclerView
. Warum erhalte ich diesen Fehler immer wieder?
Ich habe andere Fragen zum selben Problem gelesen, aber keine davon hilft.
android
android-recyclerview
recycler-adapter
Equitharn
quelle
quelle
Antworten:
Können Sie sicherstellen, dass Sie diese Anweisungen aus dem "Haupt" -Thread aufrufen (z. B. innerhalb der
onCreate()
Methode)? Sobald ich die gleichen Anweisungen aus einer "verzögerten" Methode aufrufe. In meinem Fall aResultCallback
erhalte ich die gleiche Nachricht.In meinem
Fragment
FallResultCallback
erzeugt das Aufrufen des folgenden Codes innerhalb einer Methode dieselbe Nachricht. NachdemonConnected()
ich den Code in die Methode in meiner App verschoben hatte, war die Nachricht verschwunden ...quelle
Ich habe die gleichen zwei Fehlermeldungen erhalten, bis ich zwei Dinge in meinem Code behoben habe:
(1) Wenn Sie Methoden implementieren, wird standardmäßig Folgendes
RecyclerView.Adapter
generiert:Stellen Sie sicher, dass Sie Ihren Code so aktualisieren, dass er lautet:
Wenn Ihre Artikel keine Elemente enthalten, werden auf dem Bildschirm natürlich keine Elemente angezeigt.
(2) Ich habe dies nicht wie in der oberen Antwort gezeigt getan : CardView layout_width = "match_parent" stimmt nicht mit der übergeordneten RecyclerView-Breite überein
(3) BEARBEITEN: BONUS: Stellen Sie außerdem sicher, dass Sie Folgendes einrichten
RecyclerView
:So nicht:
Ich habe einige Tutorials mit der letzteren Methode gesehen. Während es funktioniert, denke ich, dass es auch diesen Fehler erzeugt.
quelle
public int getItemCount() { return artists == null ? 0 : artists.size(); }
und der LayoutInflaterView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
Ich habe die gleiche Situation mit Ihnen, Anzeige ist in Ordnung, aber Fehler im locat erscheinen. Das ist meine Lösung: (1) Initialisieren Sie den RecyclerView & Bind-Adapter ON CREATE ()
(2) Rufen Sie notifyDataStateChanged auf, wenn Sie die Daten erhalten
Im Quellcode von recyclerView gibt es einen anderen Thread, um den Status der Daten zu überprüfen.
Im dispatchLayout () finden wir den Fehler darin:
quelle
Ich habe dieses Problem, ein paar Zeit Problem ist recycleView in ScrollView Objekt gesetzt
Nach Überprüfung der Implementierung scheint der Grund der folgende zu sein. Wenn RecyclerView in eine ScrollView eingefügt wird, ist die Höhe während des Messschritts nicht angegeben (da ScrollView eine beliebige Höhe zulässt) und entspricht infolgedessen der Mindesthöhe (gemäß Implementierung), die anscheinend Null ist.
Sie haben mehrere Möglichkeiten, dies zu beheben:
(Kann auch befolgt werden
android.support.v4.widget.NestedScrollView
)quelle
1) Erstellen Sie einen ViewHolder , der nichts tut :)
2) Erstellen Sie erneut RecyclerView , das nichts tut :)
3) Wenn Ihr echter Recycler noch nicht fertig ist, verwenden Sie einfach das folgende Beispiel.
Dies ist zwar nicht die beste Lösung, aber es funktioniert! Hoffe das ist hilfreich.
quelle
Dies geschieht, wenn Sie den Adapter während der Erstellungsphase nicht einstellen:
Bewegen Sie den Adapter einfach mit leeren Daten in onCreate und wenn Sie den Datenaufruf haben:
quelle
Überprüfen Sie, ob Sie diese Methode in Ihrem Adapter nicht aufgerufen haben
quelle
Stellen Sie sicher, dass Sie den Layout-Manager für Ihre RecyclerView wie folgt festlegen:
Stattdessen
LinearLayoutManager
können Sie auch andere Layout-Manager verwenden.quelle
Ich hatte den gleichen Fehler, den ich behoben habe, wenn Sie darauf warten, dass Daten wie ich nachgerüstet werden oder ähnliches
Vor Oncreate stellen
Legen Sie sie in Ihr Oncreate
Wenn Sie Daten erhalten, setzen Sie
Gehen Sie nun in Ihre ArtistArrayAdapter-Klasse und tun Sie dies, wenn Ihr Array leer oder null ist. GetItemCount gibt 0 zurück, wenn nicht, hat es die Größe des Künstler-Arrays
quelle
Diese Zeilen müssen in
OnCreate
:quelle
Dies liegt daran, dass sich das tatsächlich aufgeblasene Layout von dem unterscheidet, auf das Sie beim Auffinden der recyclerView verwiesen haben. Standardmäßig wird beim Erstellen des Fragments die onCreateView-Methode wie folgt angezeigt:
return inflater.inflate(R.layout.<related layout>,container.false);
Erstellen Sie stattdessen die Ansicht separat und verwenden Sie diese, um auf recyclerView zu verweisen
View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;
quelle
Initialisieren Sie zuerst den Adapter
Wenn sich der Datensatz ändert, rufen Sie einfach die updateComments-Methode auf.
quelle
Für diejenigen, die das
RecyclerView
innerhalb eines Fragments verwenden und es aus anderen Ansichten aufblasen: Wenn Sie die gesamte Fragmentansicht aufblasen, stellen Sie sicher, dass Sie dasRecyclerView
an die Stammansicht binden .Ich habe alles für den Adapter richtig angeschlossen und gemacht, aber ich habe die Bindung nie gemacht. Diese Antwort von @Prateek Agarwal hat alles für mich, aber hier ist mehr Ausarbeitung.
Kotlin
Java
quelle
Ersetzen Sie einfach den obigen Code durch diesen und es sollte funktionieren. Was Sie falsch gemacht haben, ist, dass Sie setAdapter (Adapter) aufgerufen haben, bevor Sie den Layout-Manager aufgerufen haben.
quelle
Dies ist wirklich ein einfacher Fehler, den Sie erhalten, da Sie hier keine Codes ausführen müssen. Dieser Fehler tritt aufgrund der falschen Layoutdatei auf, die von der Aktivität verwendet wird. Mit der IDE habe ich automatisch ein Layout v21 eines Layouts erstellt, das zum Standardlayout der Aktivität wurde. Alle Codes, die ich in der alten und neuen Layoutdatei gemacht habe, hatten nur wenige XML-Codes, was zu diesem Fehler führte.
Lösung: Kopieren Sie alle Codes des alten Layouts und fügen Sie sie in Layout v 21 ein
quelle
In meinem Fall habe ich den Adapter in
onLocationChanged()
Callback UND Debugging im Emulator eingestellt. Da es keinen Standortwechsel feststellte, wurde es nie ausgelöst. Wenn ich sie manuell in den erweiterten Steuerelementen des Emulators einstellte, funktionierte es wie erwartet.quelle
Ich habe diesen Fehler behoben. Sie müssen nur den Layout-Manager hinzufügen und den leeren Adapter hinzufügen.
Wie dieser Code:
quelle
Fügen Sie einfach Folgendes hinzu
RecyclerView
Beispiel:
quelle
Ich hatte diesen Fehler und versuchte eine Weile, ihn zu beheben, bis ich die Lösung fand.
Ich habe eine private Methode buildRecyclerView erstellt und sie zweimal aufgerufen, zuerst in onCreateView und dann nach meinem Rückruf (in dem ich Daten von einer API abrufe). Dies ist meine Methode buildRecyclerView in meinem Fragment:
Außerdem muss ich die Methode get-Item-Count in meinem Adapter ändern, da On-Create-View die Liste null ist und einen Fehler verursacht. Mein get-Item-Count ist also der folgende:
quelle
In meiner Situation war es eine vergessene Komponente, die sich in der ViewHolder-Klasse befindet, aber nicht in der Layoutdatei
quelle
Ich hatte das gleiche Problem und stellte fest, dass ich sowohl das LayoutManage r als auch den Adapter nach dem Abrufen der Daten aus meiner Quelle festlegte , anstatt die beiden in der onCreate- Methode festzulegen .
Benachrichtigen Sie dann den Adapter über Datenänderungen
quelle
Dieses Problem liegt daran, dass Sie keine
LayoutManager
für Ihre hinzufügenRecyclerView
.Ein weiterer Grund ist, dass Sie diesen Code in einem NonUIThread aufrufen. Stellen Sie sicher, dass Sie diesen Aufruf im UIThread aufrufen.
Die Lösung besteht nur darin, dass Sie ein
LayoutManager
für dasRecyclerView
vor IhnensetAdapter
im UI-Thread hinzufügen müssen .quelle
Mein Problem war, dass meine Recycling-Ansicht so aussah
Wann es so hätte aussehen sollen
quelle
Erstellen Sie in Ihrer
RecyclerView
Adapterklasse beispielsweiseMyRecyclerViewAdapter
einen Konstruktor mit den folgenden Parametern.mData
sind die Daten, die Sie an den Adapter übergeben. Es ist optional, wenn Sie keine Daten übergeben müssen.mInflater
ist dasLayoutInflater
Objekt, das Sie erstellt haben und das Sie in derOnCreateViewHolder
Funktion des Adapters verwenden.Danach befestigen Sie den Adapter in der MainActivity oder wo immer Sie möchten, auf dem Haupt- / UI-Thread richtig wie
quelle
Behebung durch Festlegen der initialisierten leeren Liste und des Adapters unten und Aufrufen von notifyDataSetChanged beim Abrufen der Ergebnisse.
quelle
Ich habe 16 Minuten meines Lebens mit diesem Problem verloren, daher gebe ich diesen unglaublich peinlichen Fehler zu, den ich gemacht habe. Ich verwende Butterknife und binde die Ansicht in onCreateView in diesem Fragment.
Es hat lange gedauert, um herauszufinden, warum ich keinen Layoutmanager hatte - aber offensichtlich werden die Ansichten eingefügt, damit sie nicht wirklich null sind, sodass der Recycler niemals null sein wird. Hoppla!
Wenn Sie ein Problem wie dieses erhalten, verfolgen Sie Ihre Ansicht und verwenden Sie so etwas wie
uiautomatorviewer
quelle
Keine gute Antwort, aber ich hatte das gleiche Problem, auch wenn der Code korrekt war. Manchmal ist es einfach die einfachste Marke. In diesem Fall kann der OP-Fehler auch
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
im Manifest fehlen , das denselben Fehler reproduziert.quelle
In meinem Fall ist es passiert, weil ich eine RecyclerView in ein LinearLayout eingebettet habe.
Ich hatte zuvor eine Layoutdatei, die nur eine Root-RecyclerView enthielt, wie folgt
Ich glaube, das Problem liegt innerhalb der 3 getrennten Zeilen. Wie auch immer, ich denke, es ist ein einfaches Problem, ich werde morgen daran arbeiten. Ich dachte, ich sollte schreiben, was ich gefunden habe, bevor ich diesen Thread vergesse.
quelle
Hinzufügen einer weiteren Antwort, seit ich auf diesen Thread gestoßen bin, der den Fehler googelt. Ich habe versucht, a zu initialisieren,
PreferenceFragmentCompat
aber ich habe vergessen, die XML-VoreinstellungonCreatePreferences
wie folgt aufzublasen :Der Fehler war ein Rätsel, bis mir klar wurde, dass
PreferenceFragmentCompat
einRecyclerView
intern verwendet werden muss.quelle
// Es passiert , wenn Sie nicht den Adapter während der Erstellungsphase Einstellung: Aufruf notifyDataSetChanged () , wenn api Antwort bekommt seinen Arbeits
quelle