يشرح هذا الدليل كيفية إنشاء شريط تطبيقات علوي ديناميكي في 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( painter = rememberVectorPainter(AppIcons.Share), contentDescription = "Share items" ) } } }, modifier = modifier ) }
نقاط رئيسية حول الرمز
- تقبل السمة
AppBarSelectionActionsSetمن فهارس العناصر المحدّدة. - يتغيّر
topBarTextحسب ما إذا كنت تختار أي عناصر.- عند اختيار عناصر، يظهر نص يصف عدد العناصر المحدّدة في
TopAppBar. - إذا لم تختَر أي عناصر، ستكون قيمة
topBarTextهي "قائمة العناصر".
- عند اختيار عناصر، يظهر نص يصف عدد العناصر المحدّدة في
- تحدّد مجموعة
actionsالإجراءات التي يتم عرضها في شريط التطبيقات العلوي. إذا كانت قيمة السمةhasSelectionصحيحة، سيظهر رمز المشاركة بعد النص. - تعالج دالة lambda
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( 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 } ) ) } } } }
نقاط رئيسية حول الرمز
- يتم تعديل الشريط العلوي استنادًا إلى عدد عناصر القائمة التي تختارها.
- يحتوي
selectedItemsعلى مجموعة فهارس العناصر المحدّدة. - يستخدم
AppBarMultiSelectionExampleScaffoldلتنظيم الشاشة.- تضبط الدالة
topBar = { AppBarSelectionActions(selectedItems) }الدالة المركّبةAppBarSelectionActionsكشريط التطبيق العلوي. يتلقّى "AppBarSelectionActions" الحالة "selectedItems".
- تضبط الدالة
- يعرض
LazyColumnالعناصر في قائمة عمودية، ويعرض فقط العناصر المرئية على الشاشة. - يمثّل
ListItemSelectableعنصر قائمة قابلاً للاختيار.- يسمح
combinedClickableبمعالجة كل من النقر والنقر المطوّل لتحديد العناصر. تؤدي النقرة إلى تنفيذ إجراء، بينما يؤدي النقر مع الاستمرار على عنصر إلى تبديل حالة اختياره.
- يسمح
النتيجة