GridLayoutManager Fehler spanSizeLookup

8

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 -

%Vor%

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))

aufrufen     
k0sh 07.08.2015, 18:56
quelle

4 Antworten

0

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.

    
k0sh 21.12.2016, 14:34
quelle
6
___ answer32023148 ​​___

Hier ist der Quellcode, der die Ausnahme in GridLayoutManager.layoutChunk()

auslöst %Vor%

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.

  1. Ändert nur den spanCount.

    Sie müssen LayoutManager.requestLayout() aufrufen, nachdem Sie Ihren spanCount geändert haben. Andernfalls kann Ihre App abstürzen.

  2. Nur die SpanSizeLookUp ändern.

    %Vor%

    und benutze es so

    %Vor%

    Dieser Weg wird nicht abstürzen, auch wenn Sie vergessen haben, notifyDataSetChanged oder requestLayout

    aufzurufen
___ qstnhdr ___ GridLayoutManager Fehler spanSizeLookup ___ answer32911181 ___

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.

    
___ qstntxt ___

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% -

%Vor%

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%

aufrufen     
___ answer41265273 ___

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.

%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.

    
___ tag123zxing ___ ZXing (ausgesprochen "Zebrastreifen") ist eine Open-Source-Multiformat-1D / 2D-Barcode-Bildverarbeitungsbibliothek, die in Java implementiert ist und über Ports in andere Sprachen verfügt. Der Fokus liegt darauf, die integrierte Kamera auf Mobiltelefonen zu verwenden, um Barcodes auf dem Gerät zu scannen und zu dekodieren, ohne mit einem Server zu kommunizieren, obwohl die Bibliothek auch die Verwendung auf einem Server unterstützt. ___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ answer32022286 ___

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?

    
___ tag123androidrecyclerview ___ Das RecyclerView Widget ist eine erweiterte und flexible Version von ListView. ___ tag123gridlayoutmanager ___ Eine RecyclerView.LayoutManager-Implementierung, die Elemente in einem Raster auslegt. Weitere Informationen zu den Dokumenten finden Sie unter http://developer.android.com/reference/android/support/v7/widget/GridLayoutManager.html ___
Trey Cai 15.08.2015 08:51
quelle
0

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?

    
Andy 15.08.2015 06:42
quelle
0

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.

    
Henrique de Sousa 02.10.2015 15:57
quelle