-1

У меня есть в коде dropDownMenu и при выборе опции почему то вылетает, код:

            Box(){
            Text(text = selectedOption, color = Colors().TextWhite, fontSize = 14.sp)
            DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
                var i = 0
                repeat(values.size)
                {
                DropdownMenuItem(onClick = {
                    selectedOption = values[i]
                    expanded = false
                }) {
                    Text(
                        values[i], fontSize = 18.sp, modifier = Modifier
                            .padding(10.dp)
                    )
                }
            I++}
        }
    }

Но что забавно, если поменять selectedOption = values[i] на, например selectedOption = values[0] или selectedOption = "Что-нибудь"

введите сюда описание изображения

            Box(){
            Text(text = selectedOption, color = Colors().TextWhite, fontSize = 14.sp)
            DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
                var i = -1
                repeat(values.size)
                {
                    i += 1
                    DropdownMenuItem(onClick = {
                        selectedOption = i.toString()
                        expanded = false
                    }) {
                        Text(
                            i.toString(), fontSize = 18.sp, modifier = Modifier
                                .padding(10.dp)
                        )
                    }
            }
        }
    }

а при таком коде, в обе опции он записывает последнее значение.

RED OO
  • 1
  • Чтобы не гадать, почему вылетает, покажите текст ошибки и стектрейс. Добавьте его в вопрос. – Vadik Sirekanyan May 13 '23 at 22:35
  • Изменил) @VadikSirekanyan – RED OO May 13 '23 at 23:19
  • Вы пытаетесь получить элемент массива с индексом 2, хотя в массиве всего 2 элемента (с индексами 0 и 1). Вы где-то меняете i, но этого кода нет в вопросе. Покажите в вопросе код, где меняется i. – Vadik Sirekanyan May 13 '23 at 23:26
  • @VadikSirekanyan Извиняюсь, забыл эту строчку. В том то и немонимание. Почему оно работает 3 раза? Repeat - 2 значит у меня будет values[0], values[1], и i =2, но в значение же она не пойдет. Код в вопросе поменял – RED OO May 14 '23 at 06:35
  • Добавил еще 1 код. Почему так получается, я понять не могу... – RED OO May 14 '23 at 07:57
  • 1
    что лежит в values? Какое значение values.size? – Grundy May 14 '23 at 09:11
  • Ваш пример не удается воспроизвести, так как неизвестно, как определяется values и что такое переменная I. Сделайте [mre], который демонстрирует вашу проблему, чтобы другие участники могли повторить эту ошибку. – Vadik Sirekanyan May 14 '23 at 10:54

2 Answers2

0

В итоге все дело было в repeat. Заменил на for и все стало работать, магия...

Box(){
            values = listOf<String>("1","2")
            Text(text = selectedOption, color = Colors().TextWhite, fontSize = 14.sp)
            DropdownMenu(expanded = expanded, onDismissRequest = { expanded = false }) {
                for(i in 0 .. values.size-1)
                {
                    DropdownMenuItem(onClick = {
                        selectedOption = values[i]
                        expanded = false
                    }) {
                        Text(
                            values[i], fontSize = 18.sp, modifier = Modifier
                                .padding(10.dp)
                        )
                    }
            }
        }
    }

RED OO
  • 1
0

Возможно, вы где-то напутали с индексами, чтобы избежать подобных ошибок, удалите var i и используйте index в функции repeat:

repeat(values.size) { index ->
    println(values[index])
}

Так как index вам по сути не нужен, то еще лучше использовать forEach для коллекции values. В таком случае еще сложнее будет допустить ошибок с индексами:

values.forEach { value ->
    println(value)
}