Pull to Refresh ist irgendwie zum Standard geworden. Jede App implementiert es ein bisschen anders. In der Support Library gibt es seit einiger Zeit eine Komponente mit dem Namen SwipeRefreshLayout
die genau dies tut – ohne viel Gefrickel.
Das Layout
Das Layout ist ziemlich einfach zu verwenden. In meinem Fall umschließt es einen RecyclerView
.
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/contentRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</android.support.v4.widget.SwipeRefreshLayout>
Der OnRefreshListener
Layout hin oder her, ohne Logik funktioniert das nicht. Wie so oft, gibt es hier einen Listener, der implementiert werden muss.
messageSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override public void onRefresh() {
//Refresh all the things! \o/
}
});
Normalerweise löse ich das so, dass ich nun eine refreshSomething()
Methode habe, die das eigentliche abrufen der Daten übernimmt. Diese ruft schlussendlich onRefreshSomethingCompleted()
auf. Dort wird dann der Adapter darüber informiert, dass sich die Daten geändert haben und beendet die Aktualisierungsanimation.
private void refreshSomething() {
// Loading... Please wait...
// Hooray we did it!
onRefreshSomethingComplete();
}
void onRefreshSomethingComplete() {
// Notify Adapter
// Tidy up your room
// Cook dinner
// Stop refresh animation
messageSwipeRefreshLayout.setRefreshing(false);
}
Zur API – Doku geht es hier: SwipeRefreshLayout
Der Artikel SwipeRefreshLayout – Pull to refresh erschien zuerst auf icancode.de.