Ce document explique comment mettre à jour votre application lorsque l'utilisateur demande un manuel actualiser, qu'il la déclenche d'un geste de balayage ou d'utiliser la barre d'action action d'actualisation.
Répondre au geste d'actualisation
Lorsque l'utilisateur effectue le geste "Balayer pour actualiser", le système affiche un indicateur de progression et appelle la méthode de rappel de votre application. Votre méthode de rappel est responsable de la mise à jour des données de l'application.
Pour répondre au geste d'actualisation dans votre application, implémentez la méthode
SwipeRefreshLayout.OnRefreshListener
et ses
onRefresh()
. La méthode onRefresh()
est appelée lorsque l'utilisateur effectue une
geste de balayage.
Placez le code de l'opération de mise à jour proprement dite dans une méthode distincte, de préférence
dans un ViewModel
, puis appelez cette méthode de mise à jour à partir de votre
Implémentation de onRefresh()
. Ainsi, vous pouvez utiliser la même mise à jour
pour effectuer la mise à jour lorsque l'utilisateur déclenche une actualisation à partir de l'action
sur la barre d'adresse.
Dans votre méthode de mise à jour, appelez
setRefreshing(false)
une fois les données mises à jour. L'appel de cette méthode indique au
SwipeRefreshLayout
pour supprimer l'indicateur de progression et 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
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
l'actualisation des données de l'application.
Pour répondre à l'action d'actualisation, remplacez
onOptionsItemSelected()
Dans votre méthode de remplacement, déclenchez le
SwipeRefreshLayout
indicateur de progression en appelant
setRefreshing()
avec la valeur true
, puis exécutez la
opération de mise à jour. Effectuez la mise à jour proprement dite dans une méthode distincte, de sorte que la même
peut être appelée si l'utilisateur déclenche la mise à jour en balayant l'écran ou en utilisant
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 la 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); }