Ich versuche, mich mit dem neuen RecyclerView herumzuschlagen, und wenn ich versuche, es auszuführen, stürzt meine App sofort ab. Es gibt mir NullPointerException für den Versuch, auf Methoden von zuzugreifen android.support.v7.widget.RecyclerView
. Ich habe mir andere Beiträge angesehen und festgestellt compile 'com.android.support:recyclerview-v7:+'
, dass die meisten Leute keine hatten, aber ich habe das versucht und es hat überhaupt nicht geholfen. Ich bin mir nicht sicher, was ich zu diesem Zeitpunkt tun soll. Ich würde mich über jede Hilfe freuen. Hier das Fehlerprotokoll: (Ich würde ein Bild posten, aber ich habe noch keine 10 Wiederholungen)
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)' on a null object reference
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764)
at android.view.View.measure(View.java:17430)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:851)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
at android.view.View.measure(View.java:17430)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5786)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
onCreateView
was Sie entfernen / zerstören / abmeldenonDestroyView
... Muss diesen Lebenszyklen folgen!Antworten:
Dieses Problem tritt normalerweise auf, wenn
LayoutManager
für das keine angegeben wurdeRecyclerView
. Sie können es so machen:quelle
final
muss. Deshalb habe ich siefinal
hier deklariert .In meinem Fall war es nicht mit 'final' verbunden, sondern mit dem in @ NemanjaKovačević Kommentar zu @aga Antwort erwähnten Problem. Ich habe beim Laden der Daten einen layoutManager eingerichtet, und das war die Ursache für denselben Absturz. Nach dem Verschieben des layoutManager-Setups nach onCreateView meines Fragments wurde das Problem behoben.
Etwas wie das:
quelle
LayoutManager
nicht zur Verfügung gestellt wurde , das war's. Sie können festlegen, dass die Variable aufLayoutManager
final oder nicht final zeigt - sie ändert nichts.Für mich hatte ich das gleiche Problem. Das Problem war, dass es eine nicht verwendete RecyclerView in XML gab, deren Ansicht weg war, aber ich binde sie nicht an einen Adapter in Activity, daher das Problem. Es wurde gelöst, sobald ich solche nicht verwendeten Recycler-Ansichten in XML entfernt hatte
dh - Ich habe diese Ansicht entfernt, da dies nicht im Code aufgerufen wurde oder ein Adapter festgelegt wurde
quelle
Ich habe diesen Absturz erlebt, obwohl ich das
RecyclerView.LayoutManager
richtig eingestellt hatte. Ich musste denRecyclerView
Initialisierungscode in denonViewCreated(...)
Rückruf verschieben, um dieses Problem zu beheben.quelle
RecyclerView
Initialisierungscodes in denonViewCreated(...)
bearbeitetenSie müssen
setLayoutManager
in derRecyclerView#onCreate()
Methode verwenden. Vor dem HinzufügenrecyclerView
zu einer Ansicht muss dasLayoutManager
Set vorhanden sein.quelle
Ich habe dieses Problem aufgrund einer falschen
RecyclerView
ID- Referenz erhalten .zu
quelle
Wenden Sie sich an Ihre ID für die Recycler-Ansicht. Wenn Sie auf die tatsächliche Recycler-Ansicht verweisen, wurde mein Problem behoben
quelle
Mein Problem war in meinem XML-Lyout. Ich habe ein Android: animateLayoutChanges auf true gesetzt und notifyDataSetChanged () auf dem RecyclerView-Adapter im Java-Code aufgerufen.
Also habe ich gerade android: animateLayoutChanges aus meinem Layout entfernt und das hat mein Problem behoben.
quelle
Ich hatte dieses Problem bei der Verwendung der Butterknife-Bibliothek. Ich hatte:
Aber die richtige Version ist:
quelle
In Gradle implementieren Sie diese Bibliothek:
Erwähnen Sie in XML Folgendes:
In Fragment verwenden wir Folgendes
recyclerView
:In Aktivität verwenden wir Folgendes
RecyclerView
:Wenn Sie horizontal benötigen,
RecyclerView
gehen Sie wie folgt vor :Wenn Sie GridLayoutManager
RecyclerView
wie folgt verwenden möchten :quelle
Ich habe eine Abhängigkeitsinjektion - ButterKnife verwendet, und dieses Problem trat auf, weil ich die Ansicht nicht gebunden hatte.
Also habe ich in onCreate () gerade diese Zeile eingefügt:
Meine RecyclerView-Deklaration mit Abhängigkeitsinjektion:
quelle
Für diejenigen, die Folgendes verwenden: Implementierung 'androidx.recyclerview: recyclerview: 1.1.0-beta05'
Stellen Sie sicher, dass Sie dies in Ihrem XML-Layout verwenden
Beim Ausführen meiner App unter API 27 ist ebenfalls ein Absturz aufgetreten. Hier ist ein Link zur Nachricht
Ursprünglich habe ich einen Stil erstellt, um die Schriftgröße meiner Textansicht in der Recyclingansicht zu ändern. Deshalb habe ich den folgenden Code erstellt: (Ich hätte einfach @dimen aufrufen können, wenn ich die Schriftgröße basierend auf den Bildschirmgrößen geändert hätte.)
Innerhalb von style.xml
und fügte dies in meinem Thema
theme.xml
Nach einer Untersuchung stellte ich fest, dass dies derjenige ist, der mir einen Fehler verursacht, und nachdem ich den Stil entfernt hatte, trat kein Absturz mehr auf.
Ich habe alle möglichen Lösungen ausprobiert, die ich hier im Stapelüberlauf gefunden habe, und habe dies fast aufgegeben. Zum Glück dachte ich in meiner Neugier, warum ich den Stil nicht entfernen sollte, vielleicht verursacht dies den Absturz und dann boomt der Absturz ist weg.
quelle
Da LinearLayoutManager standardmäßig vertikal ist, ist dies einfacher:
recyclerView.setLayoutManager(new LinearLayoutManager(context));
Wenn Sie die Ausrichtung ändern möchten, können Sie diesen Konstruktor verwenden:
quelle
Ich denke das Problem liegt in deinem
Adapter
. Stellen Sie sicher , Sie sind zurückgekehrtViewHolder
inonCreateViewHolder()
. Wie unten:quelle
Für mich war das Problem mit meiner activity_main.xml (21), in der die recycleView keine ID hatte.
activity_main.xml (21)
activity_main.xml
Es hat funktioniert, als ich ein Android hinzugefügt habe: id = "@ + id / transac_recycler_view" zur activity_main.xml (21) recycleView
quelle
In meinem Fall habe ich nur die Butterknife-Bibliothek hinzugefügt und vergessen, annotationProcessor hinzuzufügen. Durch Hinzufügen der folgenden Zeile zu build.gradle (App-Modul) wurde mein Problem gelöst.
quelle
Recyclerview recylerview = findbyid (R.id.recyclerview) Möglicherweise haben Sie es verpasst
quelle
Ich hatte ein ähnliches Problem, als ich meine Anwendung auf GenyMotion testete. Nach dem Neustart wurde das Gerät in GenyMotion Problem behoben
quelle
Ich hatte das gleiche Problem, weil ich die RecyclerView in einem anderen Layout und nicht in activity_main.xml hatte.
Durch die Suche auf einigen Websites habe ich etwas bekommen und wollte hier teilen
ID hinzufügen, um Tag in Activity_main.xml einzuschließen
<include id="includedRecyclerLayout" .... </include>
Rufen Sie dieses Layout auf, bevor Sie die Ansicht nach ID in MainActivity.java durchsuchen
`ConstraintLayout includeLayout = findViewById (R.id.inckudedRecyclerLayout);
RecyclerViewrecyclerview = includeLayout.findViewById (R.id.RECYCLER_VIEW_ID) `;
quelle
Wenn ich wo du bist, werde ich das tun. onView (withId (android.R.id.list)). perform (RecyclerViewActions.scrollToPosition (3)); android.R.id.list Ändern Sie es in Ihre Listen-ID und Position wird Ihre Position innerhalb Ihres Arrays sein.
quelle
Schreiben von Code in onCreateView ()
RecyclerView recyVideo = view.findViewById (R.id.recyVideoFag);
Schreiben von Code in onCreate () RecyclerView recyVideo = findViewById (R.id.recyVideoFag);
quelle