Ce guide explique comment créer une barre d'application supérieure dynamique dans Compose qui modifie ses options lorsque des éléments sont sélectionnés dans la liste. Vous pouvez modifier le titre et les actions de la barre d'application supérieure en fonction de l'état de sélection.
Implémenter le comportement dynamique de la barre d'application supérieure
Ce code définit une fonction composable pour la barre d'application supérieure qui change en fonction de la sélection d'éléments :
@Composable fun AppBarSelectionActions( selectedItems: Set<Int>, modifier: Modifier = Modifier, ) { val hasSelection = selectedItems.isNotEmpty() val topBarText = if (hasSelection) { "Selected ${selectedItems.size} items" } else { "List of items" } TopAppBar( title = { Text(topBarText) }, colors = TopAppBarDefaults.topAppBarColors( containerColor = MaterialTheme.colorScheme.primaryContainer, titleContentColor = MaterialTheme.colorScheme.primary, ), actions = { if (hasSelection) { IconButton(onClick = { /* click action */ }) { Icon( imageVector = Icons.Filled.Share, contentDescription = "Share items" ) } } }, ) }
Points clés concernant le code
AppBarSelectionActions
accepte unSet
d'index d'éléments sélectionnés.- L'icône
topBarText
change selon que vous sélectionnez ou non des éléments.- Lorsque vous sélectionnez des éléments, un texte décrivant le nombre d'éléments sélectionnés s'affiche dans
TopAppBar
. - Si vous ne sélectionnez aucun élément, le
topBarText
est "Liste des éléments".
- Lorsque vous sélectionnez des éléments, un texte décrivant le nombre d'éléments sélectionnés s'affiche dans
- Le bloc
actions
définit les actions que vous affichez dans la barre d'application supérieure. SihasSelection
est défini sur "true", une icône de partage s'affiche après le texte. - Le lambda
onClick
deIconButton
gère l'action de partage lorsque vous cliquez sur l'icône.
Résultat

Intégrer une liste sélectionnable dans une barre d'application supérieure dynamique
Cet exemple montre comment ajouter une liste sélectionnable à une barre d'application supérieure dynamique :
@Composable private fun AppBarMultiSelectionExample( modifier: Modifier = Modifier, ) { val listItems by remember { mutableStateOf(listOf(1, 2, 3, 4, 5, 6)) } var selectedItems by rememberSaveable { mutableStateOf(setOf<Int>()) } Scaffold( topBar = { AppBarSelectionActions(selectedItems) } ) { innerPadding -> LazyColumn(contentPadding = innerPadding) { itemsIndexed(listItems) { _, index -> val isItemSelected = selectedItems.contains(index) ListItemSelectable( selected = isItemSelected, Modifier .combinedClickable( interactionSource = remember { MutableInteractionSource() }, indication = null, onClick = { /* click action */ }, onLongClick = { if (isItemSelected) selectedItems -= index else selectedItems += index } ) ) } } } }
Points clés concernant le code
- La barre supérieure est mise à jour en fonction du nombre d'éléments de liste que vous sélectionnez.
selectedItems
contient l'ensemble des index des éléments sélectionnés.AppBarMultiSelectionExample
utilise unScaffold
pour structurer l'écran.topBar = { AppBarSelectionActions(selectedItems) }
définit le composableAppBarSelectionActions
comme barre d'application supérieure.AppBarSelectionActions
reçoit l'étatselectedItems
.
LazyColumn
affiche les éléments dans une liste verticale, en n'affichant que ceux visibles à l'écran.ListItemSelectable
représente un élément de liste sélectionnable.combinedClickable
permet de gérer les clics et les clics longs pour la sélection d'éléments. Un clic permet d'effectuer une action, tandis qu'un appui prolongé sur un élément permet de modifier son état de sélection.
Résultat
