#android #kotlin #lazy-loading #android-jetpack-compose
Вопрос:
У меня есть действие с динамическим списком классов данных, которые я получаю от виртуальной машины. Список может быть очень большим, поэтому мне нужно показать около 100 элементов на экране (в колонке LazyColumn со прокруткой). Когда я получаю список, я делю его на 100 пунктов, таких как
val currentLogsList by MutableStateFlow(state.currentLogs).collectAsState() val chunkedLogsList by MutableStateFlow(state.currentLogs.chunked(100)).collectAsState()
Для каждого списка из 100 элементов мне нужно создать кнопку страницы, поэтому я делаю что-то подобное
var chunkedIndex by remember { mutableStateOf(0) } LazyRow() { OutlinedButton( onClick = { chunkedIndex = chunkedLogsList.indexOf(it) }, modifier = Modifier.padding(5.dp), ) { Text( text = (chunkedLogsList.indexOf(it) 1).toString(), fontSize = 14.sp ) } }
Проблема в том, что я могу показать максимум 5 кнопок страницы на экране, и в моем случае мне нужен алгоритм для динамического изменения индекса этих кнопок при нажатии. Например: Кнопки на экране есть [1] [2] [3] [4] [5]
, и когда пользователь нажимает на кнопку [4]
, она меняется на [2] [3] [4] [5] [6]
и т. Д.
ОБНОВИТЬ фрагмент сложного кода:
@Composable fun SomeScreen() { val currentLogsList by MutableStateFlow(state.currentLogs).collectAsState() val chunkedLogsList by MutableStateFlow(state.currentLogs.chunked(100)).collectAsState() var chunkedIndex by remember { mutableStateOf(0) } Content( currentLogsList = chunkedLogsList[chunkedIndex] ) LazyRow() { OutlinedButton( onClick = { chunkedIndex = chunkedLogsList.indexOf(it) }, modifier = Modifier.padding(5.dp), ) { Text( text = (chunkedLogsList.indexOf(it) 1).toString(), fontSize = 14.sp ) } } } @Composable private fun Content( currentLogsList: Listlt;LogEntitygt;, ) { LazyColumn( modifier = Modifier .height(400.dp) .padding(top = 10.dp, bottom = 20.dp, start = 20.dp, end = 20.dp), state = listState ) { items(currentLogsList) { //some magic } } }
Комментарии:
1. Вы просто хотите центрировать кнопку для выбранной в данный момент страницы. Это правильно? И у вас нет
items
функции в ЛэйзИре?2. @ArpitShukla обновил пост. У меня есть элементы в
LazyColumn
этомList
списке элементов по индексу, который изменяется по кнопке страницы