Répondre à une demande d'actualisation

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);
}