@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
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 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?
или весь этот метод вызывается при листании? вроде нет
Ответ написан
Ваш ответ на вопрос

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

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