Ce document explique comment mettre à jour votre application lorsque l'utilisateur demande une actualisation manuelle, qu'il la déclenche par un geste de balayage ou qu'il utilise l'action d'actualisation de la barre d'action.
Répondre au geste d'actualisation
Lorsque l'utilisateur effectue le geste de balayage pour actualiser, le système affiche l'indicateur de progression et appelle la méthode de rappel de votre application. Votre méthode de rappel est chargée de mettre à jour les données de l'application.
Pour répondre au geste d'actualisation dans votre application, implémentez l'interface SwipeRefreshLayout.OnRefreshListener
et sa méthode onRefresh()
. La méthode onRefresh()
est appelée lorsque l'utilisateur effectue un geste de balayage.
Placez le code de l'opération de mise à jour réelle dans une méthode distincte, de préférence dans un ViewModel
, et appelez cette méthode de mise à jour à partir de votre implémentation onRefresh()
. De cette façon, vous pouvez utiliser la même méthode de mise à jour pour effectuer la mise à jour lorsque l'utilisateur déclenche une actualisation à partir de la barre d'action.
Dans votre méthode de mise à jour, appelez setRefreshing(false)
une fois la mise à jour des données terminée. L'appel de cette méthode indique à SwipeRefreshLayout
de supprimer l'indicateur de progression et de mettre à jour le contenu de la vue.
Par exemple, le code suivant implémente onRefresh()
et appelle la méthode myUpdateOperation()
pour mettre à jour les données affichées par un ListView
:
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(); } );
Répondre à l'action d'actualisation
Si l'utilisateur demande une actualisation à l'aide de la barre d'action, le système appelle la méthode onOptionsItemSelected()
. Votre application répond à cet appel en affichant l'indicateur de progression et en actualisant les données de l'application.
Pour répondre à l'action d'actualisation, forcez onOptionsItemSelected()
. Dans votre méthode de forçage, déclenchez l'indicateur de progression SwipeRefreshLayout
en appelant setRefreshing()
avec la valeur true
, puis effectuez l'opération de mise à jour. Effectuez la mise à jour réelle dans une méthode distincte afin que la même méthode puisse être appelée si l'utilisateur déclenche la mise à jour avec un balayage ou utilise la barre d'action. Une fois la mise à jour terminée, appelez setRefreshing(false)
pour supprimer l'indicateur de progression de l'actualisation.
Le code suivant montre comment répondre à l'action de requête:
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); }