Répondre à une demande d'actualisation

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 via 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 responsable de la mise à jour des 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 de onRefresh(). Ainsi, 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 les données mises à jour. 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, remplacez onOptionsItemSelected(). Dans votre méthode de remplacement, 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 via une méthode distincte, de sorte que la même méthode puisse être appelée, que l'utilisateur déclenche la mise à jour par balayage ou via 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);
}