Ошибка ArrayIndexOutOfBoundsException при работе с DropdownMenu
У меня есть в коде 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)
)
}
}
}
}
а при таком коде, в обе опции он записывает последнее значение.
Ответы (2 шт):
Автор решения: RED OO
→ Ссылка
В итоге все дело было в 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)
)
}
}
}
}
Автор решения: Vadik Sirekanyan
→ Ссылка
Возможно, вы где-то напутали с индексами, чтобы избежать подобных ошибок, удалите var i и используйте index в функции repeat:
repeat(values.size) { index ->
println(values[index])
}
Так как index вам по сути не нужен, то еще лучше использовать forEach для коллекции values. В таком случае еще сложнее будет допустить ошибок с индексами:
values.forEach { value ->
println(value)
}
