במדריך הזה מוסבר איך ליצור סרגל אפליקציה דינמי בחלק העליון של 'כתיבה', שמשנה את האפשרויות שלו כשבוחרים פריטים מהרשימה. אתם יכולים לשנות את הכותרת והפעולות בסרגל האפליקציות העליון בהתאם למצב הבחירה.
הטמעת התנהגות דינמית של סרגל האפליקציה העליון
הקוד הזה מגדיר פונקציה שניתנת ליצירה עבור סרגל האפליקציות העליון, שמשתנה בהתאם לבחירת הפריט:
@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
מטפלת בפעולה 'שיתוף' כשלוחצים על הסמל.
התוצאה
![בסרגל האפליקציות הדינמי העליון מוצג הטקסט 'נבחרו 3 פריטים' עם סמל שיתוף. הטקסט והסמל האלה מופיעים רק כשפריטים נבחרים.](https://developer.android.google.cn/static/develop/ui/compose/images/components/AppBarSelectionActions.png?authuser=6&hl=he)
שילוב רשימה שאפשר לבחור ממנה בסרגל האפליקציה העליון הדינמי
בדוגמה הזו מוסבר איך להוסיף רשימה לבחירה לסרגל האפליקציה העליון הדינמי:
@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
מאפשרת טיפול גם בלחיצה וגם בלחיצה ארוכה לבחירת פריטים. לחיצה מבצעת פעולה, בעוד שלחיצה ארוכה על פריט משנה את מצב הבחירה שלו.
התוצאה
![בסרגל האפליקציות העליון הדינמי מוצג הטקסט 'נבחרו 3 פריטים', ואחריו סמל שיתוף. מתחת לזה מוצגת רשימה של כמה פריטים, עם סימני וי לצד שלושת הפריטים שנבחרו.](https://developer.android.google.cn/static/develop/ui/compose/images/components/AppBarMultiSelectionExample.png?authuser=6&hl=he)