SwipeRefreshLayout richtig benutzen?

B

Binbose

Ambitioniertes Mitglied
0
Hallo Leute,

ich habe jetzt schon viel danach gesucht wie man das SwipeRefreshLayout richtig verwendet, und finde nichts so recht passendes.
Bisher habe ich es so implementiert(und das ist auch dass einzige, was man so findet):
Code:
swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
        swipeLayout.setOnRefreshListener(new OnRefreshListener() {

            @Override
            public void onRefresh() {
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //Hier Serververbindung
                    }
                }, 0);

            }
        });
        swipeLayout
                .setColorScheme(android.R.color.holo_blue_dark,
                        android.R.color.background_dark,
                        android.R.color.holo_blue_dark,
                        android.R.color.background_dark);
Aber das scheint ja nur eine Demovariante zu sein. Ich möchte eigentlich beim Refresh ohne Verzögerung mit einem Server kommunizieren, und nebenbei die Animation laufen lassen. (Jetzt startet ja die Animation, und wenn sie vorbei ist wird die Methode auf dem Main-Thread ausgeführt)
Kann mir einer erklären wie das geht.

Vielen dank im Vorraus :)
 
Hmm also erst mal ist das oben, das alte Beispiel sprich die Holovariante
seit der neuen AppCompat Lib wurde auch noch mal das Swiperefresh geändert (Materialdesign) -> keine Farben mehr sondern ein animierter Pfeil

->
Code Beispiel:

https://github.com/stormzhang/SwipeRefreshLayoutDemo


Du musst im Grunde dein onRefresh anpassen, hier deine Routine rein welche mit dem Server kommuniziert und am Ende
mSwipeLayout.setRefreshing(false);
.
 
Ja, bisher hatte ich noch nich genug Zeit mich mit der neuen AppCombat Lib auseinanderzusetzen, deshalb läuft alles noch mit der alten Library.
Aber was nutzt man denn da am besten in der in der onRefresh() Methode statt des
Code:
new Handler().postDelayed(...
? Ich habe es schon mit
Code:
new Thread(new Runnable() {
            @Override
            public void run() {...
versucht, aber das funktioniert nicht.
 
Ok, und das dann einfach in die onRefresh() Methode ohne den Handler und am Ende setRefreshing(false) ja?
Danke schön schon mal, ich werde es gleich mal so versuchen :)
 
Jo also in onRefresh startest / kreierst du deinen AsyncTask

.> jetzt musst du schauen wie der aufgebaut ist

onPreExecute(), -> da kommt alles rein was vor dem AsyncTeil passieren soll, Zugriff auf UI möglich

doInBackground -> hier passiert das eigentliche Laden der Daten
-> Kein Zugriff auf UI, da es wie der Name sagt im Background läuft


onPostExecute -> hier wäre der Download abgeschlossen, und du hast wieder
Zugriff auf die UI,
hier würdest du

setRefreshing(false) einbauen,

Ein kleiner Hinweis, User machen oft Sachen die man vorher nicht so plant.
Sprich wenn ein ungeduldiger User deine App verlässt, könnten hier erste Fehler lauern.


Also erst mal prüfen ob es Swipelyout noch gibt und nicht NULL ist

if (mSwipeLayout != null)
{
mSwipeLayout.setRefreshing(false);
}
 
Ok, ich habs jetzt mit runOnUiThread gemacht, funktioniert ja genausogut

Haha, genau das ist mir eben passiert, und ich habe mich schon gefragt warum die gecrasht ist :D
 

Ähnliche Themen

S
Antworten
7
Aufrufe
1.152
swa00
swa00
J
Antworten
5
Aufrufe
845
swa00
swa00
Zurück
Oben Unten