Для создания массива программно

#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 примитивов, и он намного эффективнее. Просто что-то, о чем нужно знать, если это важно!