Задать вопрос
@DunkanMaklaut
Студент

Как получить индекс текущего элемента в LazyRow?

Доброго времени суток. Я новичек в Android, делаю проект на Compose в котором есть пролистываемый список картинок реализованный через LazyRow. При перелистывании у меня должен изменяться цвет фона. Но вот незадача, при пролистывании вправо, все ок, фон меняется как только элемент зафиксировался, а когда листаю влево, то фон меняется как только я начинаю двигать элемент. Подскажите как это можно исправить
fun Choose(){
    val lazyListState = rememberLazyListState()
    val colorState = remember{
        mutableStateOf(Color.Red)
    }
    val layoutInfo: LazyListSnapperLayoutInfo = rememberLazyListSnapperLayoutInfo(lazyListState)
    val indexLazyList =remember{
        mutableStateOf(layoutInfo.currentItem?.index)
    }
    indexLazyList.value=layoutInfo.currentItem?.index
    println(layoutInfo.currentItem?.index)
    when(indexLazyList.value){
        0 -> colorState.value = Color.Red
        1 -> colorState.value = Color.Yellow
        2 -> colorState.value = Color.Green
        3 -> colorState.value = Color.Blue
        4 -> colorState.value = Color.Magenta
    }
    LazyRow(
        state = lazyListState,
        flingBehavior = rememberSnapperFlingBehavior(lazyListState),
        modifier = Modifier.fillMaxWidth().background(color = colorState.value),
        contentPadding = PaddingValues(35.dp),
        verticalAlignment = Alignment.CenterVertically,
        horizontalArrangement = Arrangement.spacedBy(50.dp)
    ) {
        for(hero in heroes){
           item(hero.key){
               HeroImageItem(text = hero.key, HeroPainter = painterResource(id = hero.value),modifier = Modifier
                   .width(350.dp)
                   .fillMaxSize()
                   .aspectRatio(3 / 4f)
              )
           }
        }

    }

}


S95Pz
  • Вопрос задан
  • 117 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Android-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Мидл Android‑разработчик
    5 месяцев
    Далее
  • Академия Codeby
    Курс «Анализ защищенности приложений Андроид»
    14 недель
    Далее
Пригласить эксперта
Ответы на вопрос 1
Jacen11
@Jacen11
я вижу что вот это
when(indexLazyList.value){
        0 -> colorState.value = Color.Red
        1 -> colorState.value = Color.Yellow
        2 -> colorState.value = Color.Green
        3 -> colorState.value = Color.Blue
        4 -> colorState.value = Color.Magenta
    }

выполняется только один раз при вызове метода. Где прописано хоть какое то изменение colorState.value?
или весь этот метод вызывается при листании? вроде нет
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы