首页 > 解决方案 > Kotlin 数组中的所有项始终包含最后一项

问题描述

我正在尝试用我的原始文件夹中的文件填充一个数组。然后我在该数组中选择一个随机插槽并使用它来播放该文件。

但是当我这样做时,每个插槽似乎都包含数组中的最终视频。我不确定这是什么原因...

    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()

标签: androidarrayskotlinandroid-videoview

解决方案


您正在错误地初始化数组。

后面的{...}Array(5)实际上是一个 lambda,它接受一个整数并返回数组中该索引的内容。分号(而不是逗号)表示 , 等中的每一个R.raw.c0R.raw.c1只是一个不做任何事情的语句。由于R.raw.c4是该块中的最后一条语句,因此它将所有五个索引都设置为该值。

你可能的意思是:

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

注意用逗号替换分号。我也切换var到 a val,因为你似乎没有改变它。


推荐阅读