我正在用Kotlin制作一个音乐播放器,我从网上翻译了java代码到Kotlin,但是我无法将List传递给putExtra,你能告诉我如何以及在哪里击败它,以便一切都平静地传输给我。该列表包含歌曲的路径。 主要活动:
package com.example.zevamusic
import android.Manifest
import android.content.Intent
import android.os.Bundle
import android.os.Environment
import android.widget.AdapterView
import androidx.appcompat.app.AppCompatActivity
import android.widget.ArrayAdapter
import android.widget.ListView
import java.io.File
class MainActivity : AppCompatActivity() {
private lateinit var listView: ListView
private lateinit var items: List<String>
private val PERMISSION_STORAGE = 101
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
listView = findViewById(R.id.listSongs)
getSongs()
ZaprosPermission()
}
fun ZaprosPermission(){
if (PermissionUtils.hasPermissions(this@MainActivity)) return
PermissionUtils.requestPermissions(this@MainActivity, PERMISSION_STORAGE)
}
private fun findSong(file: File): List<File> {
val arrayList = mutableListOf<File>()
val files = file.listFiles() ?: return arrayList
for (singleFile in files) {
if (singleFile.isDirectory && !singleFile.isHidden) {
arrayList.addAll(findSong(singleFile))
} else {
if (singleFile.name.endsWith(".mp3")) {
arrayList.add(singleFile)
}
}
}
return arrayList
}
private fun getSongs() {
val songs = findSong(Environment.getExternalStorageDirectory())
items = songs.map { it.name.replace(".mp3", "") }
val songsAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, items)
listView.adapter = songsAdapter
listView.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
val song = listView.getItemAtPosition(position).toString()
val intent = Intent(this, PlayerActivity::class.java).apply {
putExtra("songs",songs)
putExtra("song", song)
putExtra("position", position)
}
startActivity(intent)
}
}
}
我尝试修复它,但我的尝试没有成功......
不幸的是,列表无法作为额外内容在活动之间直接传递。传递列表的最佳解决方案是传递 Parcelable 对象。像this SO answer这样的东西可能是你最好的选择。关于同一问题的已接受的答案也将是一个很好的实现。