Ошибка ArrayIndexOutOfBoundsException при работе с DropdownMenu

Рейтинг: -1Ответов: 2Опубликовано: 14.05.2023

У меня есть в коде 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)
                        )
                    }


                }
            }
        }

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

Ответы

▲ 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)
                        )
                    }


                }
            }
        }
▲ 0

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

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

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

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