Auf Aktualisierungsanfrage antworten

In diesem Dokument wird beschrieben, wie Sie Ihre App aktualisieren, wenn der Nutzer eine manuelle Aktualisierung anfordert, unabhängig davon, ob sie durch eine Wischgeste ausgelöst wird oder die Aktionsleiste zum Aktualisieren verwendet.

Auf Aktualisierungsgeste reagieren

Wenn der Nutzer die Wischgeste zum Aktualisieren ausführt, zeigt das System die Fortschrittsanzeige an und ruft die Callback-Methode der App auf. Die Callback-Methode sorgt dafür, dass die App-Daten aktualisiert werden.

Um auf die Aktualisierungsgeste in Ihrer App zu reagieren, implementieren Sie die SwipeRefreshLayout.OnRefreshListener-Schnittstelle und die zugehörige Methode onRefresh(). Die Methode onRefresh() wird aufgerufen, wenn der Nutzer eine Wischgeste ausführt.

Platzieren Sie den Code für den tatsächlichen Aktualisierungsvorgang in einer separaten Methode, vorzugsweise in einem ViewModel, und rufen Sie diese Aktualisierungsmethode aus Ihrer onRefresh()-Implementierung auf. So können Sie dieselbe Aktualisierungsmethode verwenden, um die Aktualisierung durchzuführen, wenn der Nutzer eine Aktualisierung über die Aktionsleiste auslöst.

Rufen Sie in Ihrer Aktualisierungsmethode setRefreshing(false) auf, wenn die Aktualisierung der Daten abgeschlossen ist. Mit dem Aufruf dieser Methode wird SwipeRefreshLayout angewiesen, die Fortschrittsanzeige zu entfernen und den Inhalt der Ansicht zu aktualisieren.

Mit dem folgenden Code wird beispielsweise onRefresh() implementiert und die Methode myUpdateOperation() aufgerufen, um die von einem ListView angezeigten Daten zu aktualisieren:

Kotlin

// Sets up a SwipeRefreshLayout.OnRefreshListener that invokes when
// the user performs a swipe-to-refresh gesture.

mySwipeRefreshLayout.setOnRefreshListener {
    Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout")

    // This method performs the actual data-refresh operation and calls
    // setRefreshing(false) when it finishes.
    myUpdateOperation()
}

Java

// Sets up a SwipeRefreshLayout.OnRefreshListener that is invoked when
// the user performs a swipe-to-refresh gesture.

mySwipeRefreshLayout.setOnRefreshListener(() -> {
    Log.i(LOG_TAG, "onRefresh called from SwipeRefreshLayout");

    // This method performs the actual data-refresh operation and calls
    // setRefreshing(false) when it finishes.
    myUpdateOperation();
  }
);

Auf Aktualisierung reagieren

Wenn der Nutzer über die Aktionsleiste eine Aktualisierung anfordert, ruft das System die Methode onOptionsItemSelected() auf. Ihre Anwendung reagiert auf diesen Aufruf mit der Fortschrittsanzeige und aktualisiert die Daten der Anwendung.

Wenn Sie auf die Aktualisierung reagieren möchten, überschreiben Sie onOptionsItemSelected(). Lösen Sie in der Überschreibungsmethode die Fortschrittsanzeige SwipeRefreshLayout aus. Rufen Sie dazu setRefreshing() mit dem Wert true auf und führen Sie dann den Aktualisierungsvorgang aus. Führen Sie die eigentliche Aktualisierung in einer separaten Methode durch, sodass dieselbe Methode aufgerufen werden kann, unabhängig davon, ob der Nutzer die Aktualisierung mit einer Wischbewegung auslöst oder die Aktionsleiste verwendet. Wenn das Update abgeschlossen ist, rufen Sie setRefreshing(false) auf, um die Fortschrittsanzeige für die Aktualisierung zu entfernen.

Der folgende Code zeigt, wie auf die Anfrageaktion reagiert wird:

Kotlin

// Listen for option item selections to receive a notification when the user
// requests a refresh by selecting the refresh action bar item.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {

        // Check whether the user triggers a refresh:
        R.id.menu_refresh -> {
            Log.i(LOG_TAG, "Refresh menu item selected")

            // Signal SwipeRefreshLayout to start the progress indicator.
            mySwipeRefreshLayout.isRefreshing = true

            // Start the refresh background task. This method calls
            // setRefreshing(false) when it finishes.
            myUpdateOperation()

            return true
        }
    }

    // User doesn't trigger a refresh. Let the superclass handle this action.
    return super.onOptionsItemSelected(item)
}

Java

// Listen for option item selections to receive a notification when the user
// requests a refresh by selecting the refresh action bar item.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        // Check whether the user triggers a refresh:
        case R.id.menu_refresh:
            Log.i(LOG_TAG, "Refresh menu item selected");

            // Signal SwipeRefreshLayout to start the progress indicator.
            mySwipeRefreshLayout.setRefreshing(true);

            // Start the refresh background task. This method calls
            // setRefreshing(false) when it finishes.
            myUpdateOperation();

            return true;
    }

    // User doesn't trigger a refresh. Let the superclass handle this action.
    return super.onOptionsItemSelected(item);
}