Ajouter l'actualisation par balayage à votre application

Essayer Compose
Jetpack Compose est le kit d'outils d'interface utilisateur recommandé pour Android. Découvrez comment effectuer un geste de balayage vers le bas pour actualiser dans Compose.

Le modèle d'interface utilisateur "Balayer pour actualiser" est entièrement implémenté dans le widget SwipeRefreshLayout, qui détecte le balayage vertical, affiche une barre de progression distinctive et déclenche des méthodes de rappel dans votre application. Pour activer ce comportement, ajoutez le widget à votre fichier de mise en page en tant que parent d'un ListView ou d'un GridView, et implémentez le comportement d'actualisation qui est appelé lorsque l'utilisateur balaye l'écran.

Cette page explique comment ajouter le widget à une mise en page existante. Elle explique également comment ajouter une action d'actualisation à la zone de dépassement de la barre d'actions afin que les utilisateurs qui ne peuvent pas utiliser le geste de balayage puissent déclencher une mise à jour manuelle avec un appareil externe.

Ajouter la dépendance SwipeRefreshLayout

Pour utiliser SwipeRefreshLayout dans votre application, ajoutez la dépendance suivante à votre fichier build.gradle :

Groovy

dependencies {
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01"
}

Kotlin

dependencies {
    implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01")
}

Ajouter le widget SwipeRefreshLayout

Pour ajouter le widget "Balayer pour actualiser" à une application existante, ajoutez SwipeRefreshLayout en tant que parent d'un seul ListView ou GridView. SwipeRefreshLayout n'accepte qu'un seul enfant ListView ou GridView.

L'exemple suivant montre comment ajouter le widget SwipeRefreshLayout à un fichier de mise en page existant contenant un ListView :

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swiperefresh"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

Vous pouvez également utiliser le widget SwipeRefreshLayout avec un ListFragment. Si la mise en page contient un ListView avec l'ID "@android:id/list", la fonctionnalité "Balayer pour actualiser" est automatiquement prise en charge. Toutefois, la déclaration explicite du ListView de cette manière remplace la structure de vue ListFragment par défaut. Si vous souhaitez utiliser la structure de vue par défaut, remplacez certaines parties du comportement SwipeRefreshLayout et ListFragment.

Ajouter une action d'actualisation à la barre d'actions

Ajoutez une action d'actualisation à la barre d'actions de votre application afin que les utilisateurs qui ne peuvent pas effectuer de gestes de balayage puissent déclencher une mise à jour manuelle. Par exemple, les utilisateurs ayant des besoins d'accessibilité peuvent déclencher des actions de la barre d'actions à l'aide d'appareils externes, tels que des claviers et des pavés directionnels.

Ajoutez l'action d'actualisation en tant qu'élément de menu plutôt que sous forme de bouton en définissant l'attribut android:showAsAction=never. Si vous affichez l'action sous forme de bouton, les utilisateurs peuvent penser que l'action du bouton d'actualisation est différente de l'action "Balayer pour actualiser". En rendant l'action d'actualisation moins visible dans la barre d'actions, vous encouragez les utilisateurs à effectuer des mises à jour manuelles à l'aide de gestes de balayage tout en conservant l'option accessible où les utilisateurs du pavé directionnel la recherchent.

Le code suivant montre comment ajouter l'action "Balayer pour actualiser" à la zone de dépassement :

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/menu_refresh"
        android:showAsAction="never"
        android:title="@string/menu_refresh"/>
</menu>