ProgressBar wird beim Aufblasen von viewstub nicht animiert

8

Ich habe eine Aktivität mit dieser Struktur:

%Vor%

Der ViewStub bläst ein Fragment in einem separaten Thread auf. Was ich brauche, ist, den Fortschritt anzuzeigen, während das Fragment geladen wird. Das Problem ist, dass die ProgressBar sich nicht dreht, während sich der Stub aufbläst (in meinem Fall etwa eine halbe Sekunde: es ist ein schweres Fragment) Ich habe alles versucht: Anzeigen / Verbergen der Ansicht, Ungültigmachen, Zeigen in ViewSwitchern ... etc, nichts funktioniert, sobald der ViewStub sich aufbläst, fängt er an sich zu drehen, es ist wie die UI eingefroren ist, während sie sich aufbläst, aber es tut Ein anderer Thread scheint sich nicht zu verbessern. Was soll ich tun?

    
MariusBudin 23.07.2014, 12:01
quelle

2 Antworten

4

Das Fragment muss in den UI-Thread geladen werden, und da die UI mit dem Fragment beschäftigt ist, das die ProgressBar nicht spinnt . Sie müssen die Daten, die in das Fragment geladen werden, in die UI-Dateien trennen. Ich würde testen und überprüfen, was genau läuft und das Fragment nicht schnell hochfahren lassen, ich würde einen Loader verwenden, um die Daten zu laden, während dem Benutzer eine Fortschrittsleiste angezeigt wird (innerhalb des Fragments). Ja, verschiebe den Fortschritt in das Layout des Fragments und kontrolliere alles von dort, weil ich nicht die Aktivität weiß, wann das Fragment geladen wird, die Aktivität kümmert sich nicht darum.

    
EE66 10.06.2015, 16:38
quelle
1

Was @Luprospro in seinem Kommentar gesagt hat, ist korrekt, wenn man viewStub.post () aufruft. Dies führt NICHT den Code innerhalb des Posts auf einem Hintergrund-Thread. Alles was es tut, ist das Runnable im UI-Thread. Es kann funktionieren, wenn Sie

tun %Vor%

Auch wenn @Luksprog dies angibt - es ist eine schlechte Übung, Ansichten auf einem Hintergrund-Thread zu instanziieren. Vielleicht ist die beste Lösung, den Aufruf von .inflate () nach draußen zu verschieben (auf den Hauptthread) und dann initFragment () aus dem Hintergrundthread aufzurufen und all das Schweres hineinzulegen.

    
Eshaan 16.06.2015 23:59
quelle