В этом руководстве объясняется, как создать динамическую верхнюю панель приложений в Compose, которая меняет свои параметры при выборе элементов из списка. Вы можете изменить заголовок и действия верхней панели приложений в зависимости от состояния выбора.
Реализовать динамическое поведение верхней панели приложений
Этот код определяет компонуемую функцию для верхней панели приложения, которая изменяется в зависимости от выбора элемента:
@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" ) } } }, ) }
Ключевые моменты кодекса
-
AppBarSelectionActions
принимаетSet
индексов выбранных элементов. -
topBarText
изменяется в зависимости от того, выбраны ли какие-либо элементы.- При выборе элементов в
TopAppBar
появляется текст, описывающий количество выбранных элементов. - Если не выбрано ни одного элемента,
topBarText
будет содержать «Список элементов».
- При выборе элементов в
- Блок
actions
определяет действия, отображаемые в верхней панели приложения. ЕслиhasSelection
имеет значение true, после текста появляется значок общего доступа. - Лямбда-функция
onClick
элементаIconButton
обрабатывает действие «Поделиться» при нажатии на значок.
Результат

Интегрировать выбираемый список в динамическую верхнюю панель приложений
В этом примере показано, как добавить выбираемый список на динамическую верхнюю панель приложений:
@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 } ) ) } } } }
Ключевые моменты кодекса
- Верхняя панель обновляется в зависимости от того, сколько элементов списка выбрано.
-
selectedItems
содержит набор индексов выбранных элементов. -
AppBarMultiSelectionExample
используетScaffold
для структурирования экрана.-
topBar = { AppBarSelectionActions(selectedItems) }
устанавливаетAppBarSelectionActions
как верхнюю панель приложения.AppBarSelectionActions
получает состояниеselectedItems
.
-
-
LazyColumn
отображает элементы в вертикальном списке, отображая только те элементы, которые видны на экране. -
ListItemSelectable
представляет выбираемый элемент списка.-
combinedClickable
позволяет обрабатывать как щелчок, так и длинный щелчок для выбора элемента. Щелчок выполняет действие, а длинный щелчок по элементу переключает его состояние выбора.
-
Результат

Дополнительные ресурсы
,В этом руководстве объясняется, как создать динамическую верхнюю панель приложений в Compose, которая меняет свои параметры при выборе элементов из списка. Вы можете изменить заголовок и действия верхней панели приложений в зависимости от состояния выбора.
Реализовать динамическое поведение верхней панели приложений
Этот код определяет компонуемую функцию для верхней панели приложения, которая изменяется в зависимости от выбора элемента:
@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" ) } } }, ) }
Ключевые моменты кодекса
-
AppBarSelectionActions
принимаетSet
индексов выбранных элементов. -
topBarText
изменяется в зависимости от того, выбраны ли какие-либо элементы.- При выборе элементов в
TopAppBar
появляется текст, описывающий количество выбранных элементов. - Если не выбрано ни одного элемента,
topBarText
будет содержать «Список элементов».
- При выборе элементов в
- Блок
actions
определяет действия, отображаемые в верхней панели приложения. ЕслиhasSelection
имеет значение true, после текста появляется значок общего доступа. - Лямбда-функция
onClick
элементаIconButton
обрабатывает действие «Поделиться» при нажатии на значок.
Результат

Интегрировать выбираемый список в динамическую верхнюю панель приложений
В этом примере показано, как добавить выбираемый список на динамическую верхнюю панель приложений:
@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 } ) ) } } } }
Ключевые моменты кодекса
- Верхняя панель обновляется в зависимости от того, сколько элементов списка выбрано.
-
selectedItems
содержит набор индексов выбранных элементов. -
AppBarMultiSelectionExample
используетScaffold
для структурирования экрана.-
topBar = { AppBarSelectionActions(selectedItems) }
устанавливаетAppBarSelectionActions
как верхнюю панель приложения.AppBarSelectionActions
получает состояниеselectedItems
.
-
-
LazyColumn
отображает элементы в вертикальном списке, отображая только те элементы, которые видны на экране. -
ListItemSelectable
представляет выбираемый элемент списка.-
combinedClickable
позволяет обрабатывать как щелчок, так и длинный щелчок для выбора элемента. Щелчок выполняет действие, а длинный щелчок по элементу переключает его состояние выбора.
-
Результат
