Bu kılavuzda, Oluştur'da listeden öğe seçildiğinde seçeneklerini değiştiren dinamik bir üst uygulama çubuğunun nasıl oluşturulacağı açıklanmaktadır. Üst uygulama çubuğunun başlığını ve işlemlerini seçim durumuna göre değiştirebilirsiniz.
Dinamik üst uygulama çubuğu davranışını uygulama
Bu kod, üst uygulama çubuğu için öğe seçimine göre değişen bir birleştirilebilir işlev tanımlar:
@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" ) } } }, ) }
Kodla ilgili önemli noktalar
AppBarSelectionActions
, seçili öğe dizinlerininSet
değerini kabul eder.topBarText
, herhangi bir öğenin seçilip seçilmediğine bağlı olarak değişir.- Öğeler seçildiğinde, seçilen öğe sayısını açıklayan metin
TopAppBar
içinde görünür. - Hiçbir öğe seçilmemişse
topBarText
"Öğelerin listesi" olur.
- Öğeler seçildiğinde, seçilen öğe sayısını açıklayan metin
actions
bloğu, üst uygulama çubuğunda görüntülenen işlemleri tanımlar.hasSelection
doğruysa metnin ardından bir paylaşma simgesi görünür.IconButton
öğesininonClick
lambdası, simge tıklandığında paylaşım işlemini yönetir.
Sonuç
Seçilebilir listeyi dinamik üst uygulama çubuğuna entegre etme
Bu örnekte, dinamik bir üst uygulama çubuğuna nasıl seçilebilir liste ekleneceği gösterilmektedir:
@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 } ) ) } } } }
Kodla ilgili önemli noktalar
- Üst çubuk, seçilen liste öğelerinin sayısına göre güncellenir.
selectedItems
, seçilen öğe dizini kümesini içerir.AppBarMultiSelectionExample
, ekranı yapılandırmak içinScaffold
kullanır.topBar = { AppBarSelectionActions(selectedItems)
}AppBarSelectionActions
bileşenini üst uygulama çubuğu olarak ayarlar.AppBarSelectionActions
,selectedItems
durumunu alır.
LazyColumn
, öğeleri dikey bir listede gösterir ve yalnızca ekranda görünen öğeleri oluşturur.ListItemSelectable
, seçilebilir bir liste öğesini temsil eder.combinedClickable
, öğe seçimi için hem tıklama hem de uzun tıklama işlemlerine olanak tanır. Bir öğeyi tıkladığınızda işlem yapılır, öğeyi uzun tıkladığınızda ise seçim durumu açılır veya kapatılır.