如何将List<String>传递给putExtra

问题描述 投票:0回答:1

我正在用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)
        }

    }

}

我尝试修复它,但我的尝试没有成功......

kotlin android-intent android-music-player
1个回答
0
投票

不幸的是,列表无法作为额外内容在活动之间直接传递。传递列表的最佳解决方案是传递 Parcelable 对象。像this SO answer这样的东西可能是你最好的选择。关于同一问题的已接受的答案也将是一个很好的实现。

© www.soinside.com 2019 - 2024. All rights reserved.