SwipeRefreshLayout keine Animation bei der Fragment-Erstellung

8

Ich verwende android.support.v4.widget.SwipeRefreshLayout mit android.support.v7.widget.RecyclerView .
Bei der Erstellung der Fragmentansicht muss SwipeRefreshLayout animation angezeigt werden. Aber wenn ich setRefreshing(true) anrufe, passiert nichts. Aber wenn ich Datenanimationsänderungen aktualisiere.
Ich nehme an, dass die Animation nicht ohne Kind in SwipeRefreshLayout angezeigt wird.
Wie man diese Animation am besten zeigt?

    
Maksym 21.10.2014, 18:00
quelle

5 Antworten

3

Danke, Leute.

Ich habe gerade festgestellt, dass die einfachste Methode darin besteht, die Methode measure (int, int) vor dem Aufruf von setRefreshing (true) mit Werten ungleich Null aufzurufen. Das Problem tritt auf, weil setRefreshing (true) vor onMeasure aufruft.

Sie müssen also anrufen:

%Vor%     
Maksym 01.11.2014, 20:20
quelle
10

Dies ist ein gemeldeter Fehler (gemeldet hier ) und eine Problemumgehung ist verfügbar:

%Vor%     
Tadas Šubonis 05.11.2014 17:59
quelle
2

Das hängt davon ab, auf welcher API-Ebene Sie bauen - wenn Sie bis API 20 verwenden, können Sie setRefreshing (true) einfach einschalten, damit wird die Animation in der ActionBar, aber in API 21 (Material Design) änderten sie den Fortschritt, um ein Spinner zu sein, als "in Sicht gezogen" wird, bevor es spinnt

Sie haben zwei Möglichkeiten, dies in API 21 zu umgehen: 1) verschiebe den Spinner mit setProgressViewOffset () nach unten, aber vergiss nicht, ihn später wieder zu aktivieren (beachte, dass dies in px funktioniert, während setDistanceToTriggerSync () dp verwendet) 2) Machen Sie einen doppelten Spinner, der angezeigt wird, wenn Sie die Daten laden

Die Code-effizientere Lösung besteht darin, den vorhandenen Spinner zu verwenden, aber Sie müssen darauf achten, dass Sie seine Position zurücksetzen

Wenn Sie die Pixeldichte berechnen müssen, können Sie sie von:

abrufen %Vor%     
Phil A 29.10.2014 20:44
quelle
0

SwipeRefreshLayout muss ein Kind enthalten, damit es ordnungsgemäß funktioniert. Stellen Sie sicher, dass Sie es initialisieren, bevor Sie es irgendwo verwenden!

    
Mike 21.10.2014 18:02
quelle
0

Sie müssen setRefreshing(true) nach onDraw() aufrufen, andernfalls würde keine Animation angezeigt.

Sie können dies in Activity in onCreate() wie folgt tun:

%Vor%

Im Fragment können Sie diese Codes in onActivityCreated() setzen.

    
Spark.Bao 15.11.2015 07:53
quelle