Алгоритм кнопок страницы для LazyList

#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 списке элементов по индексу, который изменяется по кнопке страницы