Panduan ini menjelaskan cara membuat panel aplikasi atas dinamis di Compose yang mengubah opsinya saat item dipilih dari daftar. Anda dapat mengubah judul dan tindakan pada panel aplikasi atas berdasarkan status pilihan.
Menerapkan perilaku panel aplikasi atas dinamis
Kode ini menentukan fungsi composable untuk panel aplikasi atas yang berubah berdasarkan pemilihan item:
@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 ) }
Poin penting tentang kode
AppBarSelectionActionsmenerimaSetindeks item yang dipilih.topBarTextberubah bergantung pada apakah Anda memilih item.- Saat Anda memilih item, teks yang menjelaskan jumlah item yang dipilih
akan muncul di
TopAppBar. - Jika Anda tidak memilih item apa pun,
topBarTextadalah "Daftar item".
- Saat Anda memilih item, teks yang menjelaskan jumlah item yang dipilih
akan muncul di
- Blok
actionsmenentukan tindakan yang Anda tampilkan di panel aplikasi atas. JikahasSelectionbernilai benar (true), ikon bagikan akan muncul setelah teks. - Lambda
onClickdariIconButtonmenangani tindakan berbagi saat Anda mengklik ikon.
Hasil
Mengintegrasikan daftar yang dapat dipilih ke dalam panel aplikasi atas dinamis
Contoh ini menunjukkan cara menambahkan daftar yang dapat dipilih ke panel aplikasi atas dinamis:
@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 } ) ) } } } }
Poin penting tentang kode
- Panel atas diperbarui berdasarkan jumlah item daftar yang Anda pilih.
selectedItemsmenyimpan kumpulan indeks item yang dipilih.AppBarMultiSelectionExamplemenggunakanScaffolduntuk menyusun layar.topBar = { AppBarSelectionActions(selectedItems) }menetapkan composableAppBarSelectionActionssebagai panel aplikasi atas.AppBarSelectionActionsmenerima statusselectedItems.
LazyColumnmenampilkan item dalam daftar vertikal, hanya merender item yang terlihat di layar.ListItemSelectablemewakili item daftar yang dapat dipilih.combinedClickablememungkinkan penanganan klik dan klik lama untuk pemilihan item. Klik akan melakukan tindakan, sementara mengklik lama item akan mengubah status pemilihannya.
Hasil