Все элементы в массиве Kotlin всегда содержат последний элемент - PullRequest
2 голосов
/ 27 мая 2020

Я пытаюсь заполнить массив файлами в моей необработанной папке. Затем я выбираю случайный слот в этом массиве и использую его для воспроизведения этого файла.

Но когда я делаю это, кажется, что каждый слот содержит то, что было окончательным видео в массиве. Не знаю, в чем причина ...

    var videos = Array(5){R.raw.c0; R.raw.c1; R.raw.c2; R.raw.c3; R.raw.c4};

    videoView.setVideoPath("android.resource://" + getPackageName() + "/" + videos[Random.nextInt(0, 4)])
    videoView.requestFocus()
    videoView.start()

Ответы [ 2 ]

6 голосов
/ 27 мая 2020

Вы неправильно инициализируете массив.

Блок {...} после Array(5) на самом деле является лямбда-выражением, которое принимает целое число и возвращает содержимое этого индекса в массиве. Точка с запятой (а не запятая) означает, что каждое из R.raw.c0, R.raw.c1, и т.д. c. это просто заявление, которое ничего не делает. Поскольку R.raw.c4 - последний оператор в этом блоке, он устанавливает все пять индексов на это значение.

Вы, вероятно, имели в виду:

val videos = intArrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)

Обратите внимание на замену точек с запятой на запятые. Я также переключил var на val, поскольку вы, кажется, не меняете его.

0 голосов
/ 27 мая 2020

Чтобы правильно создать массив, вы должны выполнить одно из следующих действий.

var videos = intArrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)

или

var videos = arrayOf(R.raw.c0, R.raw.c1, R.raw.c2, R.raw.c3, R.raw.c4)

Попробуйте, это должно решить вашу проблему. проблема.

...