485 Stimmen

Wie man Android Pull-to-Refresh implementiert

Wenn Sie in Android-Anwendungen wie Twitter (offizielle App) auf eine ListView stoßen, können Sie sie nach unten ziehen (und sie springt zurück, wenn sie losgelassen wird), um den Inhalt zu aktualisieren.

Ich frage mich, wie man das Ihrer Meinung nach am besten umsetzen kann?

Ich könnte mir einige Möglichkeiten vorstellen:

  1. Ein Element oben auf der ListView - aber ich glaube nicht, dass das Zurückblättern zu Elementposition 1 (0-basiert) mit Animation auf der ListView eine einfache Aufgabe ist.
  2. Eine weitere Ansicht außerhalb der ListView - aber ich muss dafür sorgen, dass die Position der ListView nach unten verschoben wird, wenn sie gezogen wird, und ich bin mir nicht sicher, ob wir erkennen können, ob die Berührungen der ListView beim Ziehen wirklich noch die Elemente in der ListView verschieben.

Irgendwelche Empfehlungen?

P.S. Ich frage mich, wann der offizielle Quellcode der Twitter-App veröffentlicht wird. Es wurde erwähnt, dass er veröffentlicht wird, aber es sind 6 Monate vergangen und wir haben seitdem nichts mehr davon gehört.

2voto

Hasan Raza Punkte 31

Wir sollten zunächst wissen, was ist Pull zu aktualisieren Layout in Android. Wir können Pull zu aktualisieren in Android als Swipe-to-refresh nennen. wenn Sie Bildschirm von oben nach unten wischen wird es einige Aktion auf setOnRefreshListener basiert tun.

Voici Lehrgang die zeigen, wie man Android pull to refresh implementiert. Ich hoffe, das hilft.

1voto

goRGon Punkte 4322

Um das neueste Lollipop Pull-To Refresh zu erhalten:

  1. Laden Sie das neueste Lollipop-SDK und die Extras/Android-Support-Bibliothek herunter
  2. Setzen Sie das Build-Ziel des Projekts auf Android 5.0 (andernfalls kann das Support-Paket Fehler bei den Ressourcen aufweisen)
  3. Aktualisieren Sie Ihre libs/Android-support-v4.jar auf die Version 21
  4. Utilisez android.support.v4.widget.SwipeRefreshLayout plus android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener

Einen ausführlichen Leitfaden finden Sie hier: http://antonioleiva.com/swiperefreshlayout/

Und für ListView empfehle ich die Lektüre von canChildScrollUp() in den Kommentaren ;)

1voto

edbaev Punkte 167

Sehr interessant Pull-to-Refresh von Yalantis . Gif für iOS, aber Sie können es überprüfen :)

<com.yalantis.pulltorefresh.library.PullToRefreshView
android:id="@+id/pull_to_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
    android:id="@+id/list_view"
    android:divider="@null"
    android:dividerHeight="0dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

1voto

Asad Ali Choudhry Punkte 4419

Diejenigen, die eine Pull-to-Refresh-Funktionalität implementieren möchten für RecyclerView können nach meiner einfachen Anleitung Wie implementiert man Pull To Refresh für RecyclerView in Android .

Zu importierende Bibliotheken

implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.gridlayout:gridlayout:1.0.0'

XML-Code

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    android:id="@+id/swipe_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

Aktivität JAVA Code

import androidx.appcompat.app.AppCompatActivity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.os.Bundle;
import android.os.Handler;

public class MainActivity extends AppCompatActivity {

private SwipeRefreshLayout swipeRefreshLayout;

...

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        ...
        swipeRefreshLayout = findViewById(R.id.swipe_layout);
        initializeRefreshListener();
}

    void initializeRefreshListener() {

        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                // This method gets called when user pull for refresh,
                // You can make your API call here,
                // We are using adding a delay for the moment
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        if(swipeRefreshLayout.isRefreshing()) {
                            swipeRefreshLayout.setRefreshing(false);
                        }
                    }
                }, 3000);
            }
        });
    }

0voto

Ahsan Malik Punkte 57

Fügen Sie dies in Ihr Layout ein

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
        android:id="@+id/swipeRefreshView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

Fügen Sie nun einfach die folgenden Zeilen in Ihren Code ein

 mSwipeRefreshLayout.setOnRefreshListener(() -> {

       // your refresh code here

    });

Sie sind fertig

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X