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

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

Войти через центр авторизации
Похожие вопросы