In diesem Dokument wird beschrieben, wie Sie Ihre App aktualisieren, wenn der Nutzer eine manuelle Aktualisierung anfordert, unabhängig davon, ob er sie mit einer Wischbewegung auslöst oder die Aktualisierungsaktion in der Aktionsleiste verwendet.
Auf die Aktualisierungsbewegung reagieren
Wenn der Nutzer die Wischbewegung zum Aktualisieren ausführt, zeigt das System die Fortschrittsanzeige an und ruft die Callback-Methode Ihrer App auf. Ihre Callback-Methode ist für das Aktualisieren der Daten der App verantwortlich.
Wenn Sie in Ihrer App auf die Aktualisierungsbewegung reagieren möchten, implementieren Sie die Schnittstelle SwipeRefreshLayout.OnRefreshListener und ihre Methode onRefresh(). Die Methode onRefresh() wird aufgerufen, wenn der Nutzer eine Wischbewegung ausführt.
Platzieren Sie den Code für den eigentlichen 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. Durch Aufrufen dieser Methode wird SwipeRefreshLayout angewiesen, die Fortschrittsanzeige zu entfernen und die Ansichtsinhalte zu aktualisieren.
Im folgenden Beispielcode wird onRefresh() implementiert und die Methode myUpdateOperation() aufgerufen, um die in einer 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 die Aktualisierungsaktion reagieren
Wenn der Nutzer eine Aktualisierung über die Aktionsleiste anfordert, ruft das System die Methode onOptionsItemSelected() auf. Ihre App reagiert auf diesen Aufruf, indem sie die Fortschrittsanzeige anzeigt und die Daten der App aktualisiert.
Wenn Sie auf die Aktualisierungsaktion reagieren möchten, überschreiben Sie onOptionsItemSelected(). Lösen Sie in Ihrer Überschreibungsmethode die Fortschrittsanzeige SwipeRefreshLayout aus, indem Sie setRefreshing() mit dem Wert true aufrufen, und führen Sie dann den Aktualisierungsvorgang aus. Führen Sie die eigentliche Aktualisierung in einer separaten Methode aus, damit dieselbe Methode aufgerufen werden kann, unabhängig davon, ob der Nutzer die Aktualisierung mit einer Wischbewegung auslöst oder die Aktionsleiste verwendet. Rufen Sie nach Abschluss der Aktualisierung setRefreshing(false) auf, um die Fortschrittsanzeige für die Aktualisierung zu entfernen.
Der folgende Code zeigt, wie Sie auf die Anforderungsaktion reagieren:
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); }