Ich habe ein Problem mit GridLayoutManger
setSpanSizeLookup
, wenn sich die Ausrichtung der Aktivität ändert, ändere ich die Span Count, während ich überprüfe, ob die spezifische Position eine Art von Typ ist, das funktioniert perfekt bei Orientierungsänderung, nur meine Problem ist, ich benutze zxing
Bibliothek, um Barcode-Scannen zu tun, wenn ein button
angeklickt wird Ich öffne die zxing
Standardabsicht und erhalte Datum von ihr, aber wenn zxing
sich öffnet geht es zu landscape
und meine aktuelle Aktivitätsausrichtung ist portrait
Dies gibt mir die IllegalArgumentException
, die das Layout verwalten wirft, wenn nur die Xzing
intent geöffnet wird, das Crash-Log ist wie dieses
java.lang.IllegalArgumentException: Item at position 0 requires 2 spans but GridLayoutManager has only 1 spans.
Dieses Problem tritt nicht auf, wenn ich das Telefon rotiere, passiert nur, wenn ich die Xzing
Absicht starte, konnte ich wirklich nicht herausfinden, wie ich dieses Problem löse, da es mich nervt. Hier ist mein spanSizeLookup
-
Die span
basiert auf der Bildschirmgröße, also kann es 1-2, 2-3 und 3-4 sein. Ich wiederhole das gibt mir keinen Fehler bei der Orientierung ändern, nur der Fehler tritt auf, wenn ich die zxing
öffnen
P. Wenn ich zxing intent
öffne, während meine Aktivität auf landspace
ist, wird der Absturz nicht auftreten.
Bearbeiten
Es scheint, als würde ich nur die zxing
-Standardabsicht starten, die dieses Problem verursacht. Ich habe ein activity
, wo es nach dem Start landscape
geht und exception
nicht, als Workaround , war, dass ich einen activity
erstellt habe, der den barcode
Scan mit einer Verzögerung von 1 Sekunde behandelt, um den intent
zu starten, als ob ich das nicht getan hätte, wird es das gleiche exception
werfen.
Bearbeiten 2
Ich habe gerade festgestellt, dass der Absturz auch ohne setSpanSpizeLookup immer noch auftritt. indem Sie einfach manager.setSpanCount(getResources().getInteger(R.integer.span))
Zu spät, um diese Frage zu beantworten, aber in einem letzten Projekt, an dem ich gearbeitet habe, stand ich demselben Problem gegenüber. Nach einigem wirklichem Debugging fand ich heraus, was die Ursache für das Problem war, aber keine Ahnung wieso es dazu führen würde.
zxing
Bibliothek intent
ruft tatsächlich CLEAR_TOP
auf, bevor der startActivityForResult
& amp; Das war das Problem, nachdem der Quellcode von zxing
Intent
geändert wurde, um diese bestimmte Zeile zu entfernen, ist der Absturz verschwunden.
Hier ist der Quellcode, der die Ausnahme in GridLayoutManager.layoutChunk()
Ist Ihre spanSize größer als Ihr spanCount? Versuchen Sie zu debuggen und wahrscheinlich ändern Sie Ihre spanCount und sehen, wie es funktioniert.
---- Aktualisiert ----
Es gibt mehrere Möglichkeiten, zwischen Liste und Gitter zu wechseln.
Ändert nur den spanCount.
Sie müssen LayoutManager.requestLayout()
aufrufen, nachdem Sie Ihren spanCount geändert haben. Andernfalls kann Ihre App abstürzen.
Nur die SpanSizeLookUp ändern.
%Vor%und benutze es so
%Vor% Dieser Weg wird nicht abstürzen, auch wenn Sie vergessen haben, notifyDataSetChanged
oder requestLayout
Erstaunlicherweise hatte ich das gleiche Problem und habe gerade die Lösung gefunden. Nach der Initialisierung von %code% mit dem im Konstruktor übergebenen spanCount stürzte unsere App ab. ABER, wenn ich %code% nach dem Konstruieren des Objekts, funktioniert es! : O
Wir verwenden RecyclerView 23.0.1. hoffe, das hilft jemandem.
Ich habe ein Problem mit %code% %code% , wenn sich die Ausrichtung der Aktivität ändert, ändere ich die Span Count, während ich überprüfe, ob die spezifische Position eine Art von Typ ist, das funktioniert perfekt bei Orientierungsänderung, nur meine Problem ist, ich benutze %code% Bibliothek, um Barcode-Scannen zu tun, wenn ein %code% angeklickt wird Ich öffne die %code% Standardabsicht und erhalte Datum von ihr, aber wenn %code% sich öffnet geht es zu %code% und meine aktuelle Aktivitätsausrichtung ist %code% Dies gibt mir die %code% , die das Layout verwalten wirft, wenn nur die %code% intent geöffnet wird, das Crash-Log ist wie dieses
%code%
Dieses Problem tritt nicht auf, wenn ich das Telefon rotiere, passiert nur, wenn ich die %code% Absicht starte, konnte ich wirklich nicht herausfinden, wie ich dieses Problem löse, da es mich nervt. Hier ist mein %code% -
Die %code% basiert auf der Bildschirmgröße, also kann es 1-2, 2-3 und 3-4 sein. Ich wiederhole das gibt mir keinen Fehler bei der Orientierung ändern, nur der Fehler tritt auf, wenn ich die %code%
öffnen
P. Wenn ich %code% öffne, während meine Aktivität auf %code% ist, wird der Absturz nicht auftreten.
Bearbeiten
Es scheint, als würde ich nur die %code% -Standardabsicht starten, die dieses Problem verursacht. Ich habe ein %code% , wo es nach dem Start %code% geht und %code% nicht, als Workaround , war, dass ich einen %code% erstellt habe, der den %code% Scan mit einer Verzögerung von 1 Sekunde behandelt, um den %code% zu starten, als ob ich das nicht getan hätte, wird es das gleiche %code% werfen.
Bearbeiten 2
Ich habe gerade festgestellt, dass der Absturz auch ohne setSpanSpizeLookup immer noch auftritt. indem Sie einfach %code%
aufrufenZu spät, um diese Frage zu beantworten, aber in einem letzten Projekt, an dem ich gearbeitet habe, stand ich demselben Problem gegenüber. Nach einigem wirklichem Debugging fand ich heraus, was die Ursache für das Problem war, aber keine Ahnung wieso es dazu führen würde.
%code% Bibliothek %code% ruft tatsächlich %code% auf, bevor der %code% & amp; Das war das Problem, nachdem der Quellcode von %code% %code% geändert wurde, um diese bestimmte Zeile zu entfernen, ist der Absturz verschwunden.
Edit: rufe setSpanCount () auf und machst eine größere Zahl als diese span no? Vielleicht wäre mehr Code in Ordnung.
Das hört sich so an, als hätte es sich um einen simultanen Änderungsfehler handeln können. Versuchen Sie nicht, eine Verzögerung pro Sekunde zu verwenden, sondern Änderungen am UI-Thread auszuführen. Dies verhindert, dass die Benutzeroberfläche versucht, auf die Liste zuzugreifen.
%Vor%Also was ist %code% ?
Wird das nicht jedes Mal dieselbe Nummer sein?
Edit: rufe setSpanCount () auf und machst eine größere Zahl als diese span no? Vielleicht wäre mehr Code in Ordnung.
Das hört sich so an, als hätte es sich um einen simultanen Änderungsfehler handeln können. Versuchen Sie nicht, eine Verzögerung pro Sekunde zu verwenden, sondern Änderungen am UI-Thread auszuführen. Dies verhindert, dass die Benutzeroberfläche versucht, auf die Liste zuzugreifen.
%Vor% Also was ist getResources().getInteger(R.integer.column)
?
Wird das nicht jedes Mal dieselbe Nummer sein?
Erstaunlicherweise hatte ich das gleiche Problem und habe gerade die Lösung gefunden. Nach der Initialisierung von GridLayoutManager
mit dem im Konstruktor übergebenen spanCount stürzte unsere App ab. ABER, wenn ich setSpanCount()
nach dem Konstruieren des Objekts, funktioniert es! : O
Wir verwenden RecyclerView 23.0.1. hoffe, das hilft jemandem.
Tags und Links android android-recyclerview gridlayoutmanager zxing