In diesem Dokument wird beschrieben, wie Sie Ihre App aktualisieren, wenn der Nutzer eine manuelle Aktualisierung anfordert, unabhängig davon, ob er sie durch Wischen oder über die Aktionsleiste auslöst.
Auf die Aktualisierungsbewegung reagieren
Wenn der Nutzer wischt, um die Seite zu aktualisieren, zeigt das System den Fortschrittsbalken an und ruft die Callback-Methode Ihrer App auf. Ihre Rückrufmethode ist für die Aktualisierung der App-Daten verantwortlich.
Wenn Sie in Ihrer App auf die Aktualisierungsgeste reagieren möchten, implementieren Sie die SwipeRefreshLayout.OnRefreshListener
-Benutzeroberfläche und die onRefresh()
-Methode. Die onRefresh()
-Methode wird aufgerufen, wenn der Nutzer wischt.
Platzieren Sie den Code für den eigentlichen Aktualisierungsvorgang in einer separaten Methode, vorzugsweise in einer ViewModel
, und rufen Sie diese Aktualisierungsmethode aus Ihrer onRefresh()
-Implementierung auf. So können Sie dieselbe Aktualisierungsmethode verwenden, um die Aktualisierung auszuführen, wenn der Nutzer eine Aktualisierung über die Aktionsleiste auslöst.
Rufen Sie in Ihrer Updatemethode setRefreshing(false)
auf, wenn die Daten aktualisiert wurden. Wenn du diese Methode aufrufst, wird SwipeRefreshLayout
angewiesen, den Fortschrittsbalken zu entfernen und den Inhalt der Ansicht zu aktualisieren.
Im folgenden Code wird beispielsweise onRefresh()
implementiert und die Methode myUpdateOperation()
aufgerufen, um die von 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 über die Aktionsleiste eine Aktualisierung 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 Aktualisierung reagieren möchten, überschreiben Sie onOptionsItemSelected()
. In Ihrer Override-Methode lösen Sie den Fortschrittsindikator SwipeRefreshLayout
aus, indem Sie setRefreshing()
mit dem Wert true
aufrufen. 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 durch Wischen oder über die Aktionsleiste auslöst. Rufen Sie nach Abschluss der Aktualisierung setRefreshing(false)
auf, um den Fortschrittsbalken für die Aktualisierung zu entfernen.
Im folgenden Code wird gezeigt, wie du auf die Anfrage reagierst:
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); }