Questa guida spiega come creare una barra dell'app in alto dinamica in Compose che cambia le opzioni quando gli elementi vengono selezionati dall'elenco. Puoi modificare il titolo e le azioni della barra dell'app in alto in base allo stato di selezione.
Implementare il comportamento dinamico della barra dell'app in alto
Questo codice definisce una funzione componibile per la barra dell'app in alto che cambia in base alla selezione degli elementi:
@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" ) } } }, modifier = modifier ) }
Punti chiave sul codice
AppBarSelectionActionsaccetta unSetdi indici degli elementi selezionati.topBarTextcambia a seconda che tu selezioni o meno degli elementi.- Quando selezioni gli elementi, il testo che descrive il numero di elementi selezionati
viene visualizzato in
TopAppBar. - Se non selezioni alcun elemento,
topBarTextè "Elenco di elementi".
- Quando selezioni gli elementi, il testo che descrive il numero di elementi selezionati
viene visualizzato in
- Il blocco
actionsdefinisce le azioni che vengono visualizzate nella barra dell'app in alto. SehasSelectionè true, dopo il testo viene visualizzata un'icona di condivisione. - La lambda
onClickdiIconButtongestisce l'azione di condivisione quando fai clic sull'icona.
Risultato
Integrare l'elenco selezionabile nella barra dell'app in alto dinamica
Questo esempio mostra come aggiungere un elenco selezionabile a una barra dell'app in alto dinamica:
@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( modifier = modifier, 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 } ) ) } } } }
Punti chiave sul codice
- La barra in alto viene aggiornata in base al numero di elementi dell'elenco selezionati.
selectedItemscontiene il set di indici degli elementi selezionati.AppBarMultiSelectionExampleutilizza unScaffoldper strutturare la schermata.topBar = { AppBarSelectionActions(selectedItems) }imposta ilAppBarSelectionActionscomponibile come barra dell'app in alto.AppBarSelectionActionsriceve lo statoselectedItems.
LazyColumnvisualizza gli elementi in un elenco verticale, eseguendo il rendering solo degli elementi visibili sullo schermo.ListItemSelectablerappresenta un elemento dell'elenco selezionabile.combinedClickableconsente la gestione sia dei clic sia dei clic prolungati per la selezione degli elementi. Un clic esegue un'azione, mentre un clic prolungato su un elemento attiva o disattiva il relativo stato di selezione.
Risultato