این راهنما توضیح میدهد که چگونه یک نوار برنامه بالای پویا در 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" ) } } }, modifier = modifier ) }
نکات کلیدی درباره کد
-
AppBarSelectionActionsیکSetاز نمایههای مورد انتخابشده را میپذیرد. topBarTextبسته به اینکه موردی را انتخاب کنید یا نه تغییر میکند.- وقتی مواردی را انتخاب میکنید، نوشتاری که تعداد موارد انتخابشده را توصیف میکند
در
TopAppBarنشان داده میشود. - اگر موردی را انتخاب نکنید،
topBarText«فهرست موارد» است.
- وقتی مواردی را انتخاب میکنید، نوشتاری که تعداد موارد انتخابشده را توصیف میکند
در
- بلوک
actionsکنشهایی را که در نوار برنامه برتر نمایش میدهید تعریف میکند. اگرhasSelectionدرست باشد، نماد همرسانی بعداز نوشتار نشان داده میشود. onClicklambda از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مجموعه نمایههای مورد انتخابشده را نگه میدارد. AppBarMultiSelectionExampleازScaffoldبرای ساختاردهی به صفحه استفاده میکند.topBar = { AppBarSelectionActions(selectedItems) }AppBarSelectionActionsرا بهعنوان نوار برنامه بالا تنظیم میکند.AppBarSelectionActionsوضعیتselectedItemsرا دریافت میکند.
LazyColumnموارد را در فهرست عمودی نمایش میدهد و فقط موارد قابلمشاهده در صفحه را ارائه میکند.ListItemSelectableنشاندهنده مورد فهرست قابلانتخاب است.combinedClickableامکان مدیریت کلیک و کلیک طولانی را برای انتخاب مورد فراهم میکند. کلیک کردن کنشی را انجام میدهد، درحالیکه کلیک طولانی روی یک مورد وضعیت انتخاب آن را تغییر میدهد.
نتیجه