#kotlin #android-alertdialog
#kotlin #android-alertdialog
Вопрос:
Я хочу создать массив программно, как показано ниже, используя Kotlin. Я мало что знаю о Java, Kotlin и Android. Возможно ли это?
val list1 = mutableListOf<String>()
// val array1 = arrayOf<String>()
for (i in 0 until 6) {
list1.add(i, ""$i"")
}
println(list1)
Вывод: ["0", "1", "2", "3", "4", "5"]
Могу ли я преобразовать изменяемый список или ArrayList, чтобы создать массив строк, например, ["0", "1", "2", "3", "4", "5"]
?
Это для создания массива для AlertDialog.
val m = item_type
var n = m - 1
var item_max = 0
when(TextView.text) {
"Title 1" -> {
item_type_from_list = item_type_list[n]
}
}
val itemTypes = generateArray(1, item_type_from_list) // Function to
// create desired array
/*val itemTypes = arrayOf<String>(
"1",
"2",
"3",
"4",
"5"
*/
val mBuilder = AlertDialog.Builder(requireContext())
mBuilder.setTitle("${TextView.text}")
mBuilder.setSingleChoiceItems(itemTypes, selectedItems1[0]) { dialog, i
->
selectedItems1[0] = i
var item_type_selected = selectedItems1[0]
dialog.dismiss()
}
val mDialog = mBuilder.create()
mDialog.show()
Вы также можете предложить какие-либо альтернативы, которые я могу сделать?
Комментарии:
1. Будет ли работать toTyedArray?
2. значение списка 3 = список 1.toTypedArray() для (элемента в списке 3){ println(элемент) } Вывод просто — значение списка 3: массив <Строка> — вывод царапин, Android Studio
Ответ №1:
val list1 : ArrayList<String> = arrayListOf()
А затем вы можете добавить свои элементы следующим образом:
for (i in 0 until 6) {
list1.add(i.toString())
}
И для вашего AlertDialog вы можете использовать следующее:
mBuilder.setSingleChoiceItems(list1.toTypedArray(), selectedItems1[0]) { dialog, i ->
selectedItems1[0] = i
var item_type_selected = selectedItems1[0]
dialog.dismiss()
}
val mDialog = mBuilder.create()
mDialog.show()
Комментарии:
1. Но это ArrayList . Могу ли я преобразовать это в массив?
2. вы не можете динамически добавлять элементы в массив. Массив имеет фиксированный размер. почему вы настаиваете на том, чтобы иметь массив, а не ArrayList? какая-то конкретная причина?
3. Это предназначено для создания списка параметров в AlertDialog. В нем говорится, что нужно указать массив в качестве параметра. Тип элемента setSingleChoiceItems. Есть ли альтернатива, которую я могу сделать?
4. Вы имеете в виду предоставление списка опций в спиннере? будет очень полезно, если вы добавите к своему вопросу код, связанный с AlertDialog.
5. Просто обновил свой ответ, и он проверяется в Android Studio. это работает.
Ответ №2:
val list1= mutableListOf<String>()
val array:Array<String> = list1.toTypedArray()
Теперь результат печати их элементов будет таким же, но, list1
является List
, но array
является Array
Комментарии:
1. Вариант 1: значение списка 3 = список 1.toTypedArray() для (элемента в списке 3){ println(элемент) } Вывод просто — значение списка 3: массив <Строка> (вывод царапин, Android Studio) Он не показывает массив. Вариант 2: Неразрешенная ссылка: toArray Я не получаю желаемый результат, т.Е. Когда я использовал MutableList.
Ответ №3:
Если вы просто хотите сгенерировать массив:
val array = Array(6) { "$it" }
Это создает массив из 6 элементов, лямбда- это функция инициализации, которая получает индекс текущего переданного элемента. Поэтому я просто превращаю это в строку здесь. Или вы можете использовать ссылку на функцию, если хотите, может быть понятнее:
val array = Array(6, Int::toString)
Чтобы преобразовать список в массив, используйте toTypedArray
функцию. Кстати, вы можете создавать списки так же, как указано выше:
// or MutableList
val list = List(6) { "$it" }
val array = list.toTypedArray()
или как более общий случай (не лучшая идея здесь, но это то, как вы можете генерировать произвольные коллекции с помощью цепочки преобразований):
val nums = (0..5).map { "$it" }.toTypedArray()
Кроме того, на всякий случай, если вы не в курсе, существуют специальные типы массивов для представления массивов примитивов:
val integers = Array(6) { it }
val ints = IntArray(6) { it }
Первый создает Integer[]
тип массива под капотом, который представляет собой массив Integer
объектов. Второй создает int[]
массив, который представляет собой массив int
примитивов, и он намного эффективнее. Просто что-то, о чем нужно знать, если это важно!