簡體   English   中英

歌曲Kotlin結束后如何自動播放?

[英]How to automatically play the song after it ends in Kotlin?

所以我有這樣的代碼

                var flag = 0
                player = MediaPlayer.create(this,songResources.getValue(songList[flag]).rawId)
                player.start()
                player.setOnCompletionListener {
                    flag++            
                    player = MediaPlayer.create(this,songResources.getValue(songList[flag]).rawId)
                    player.start()
                    player.setOnCompletionListener {
                       flag++            
                       player=MediaPlayer.create(this,songResources.getValue(songList[flag]).rawId)
                       player.start()
                       player.setOnCompletionListener {
                          //and so on, and so forth. 
                          //assume this is the last song on the list. 
                          //set flag back to 0 and the rest is just like above code
                          flag = 0
                          player=MediaPlayer.create(this,songResources.getValue(songList[flag]).rawId)
                          player.start()
                          player.setOnCompletionListener {// just like above code}
                       }
                    }        
                }

基本上代碼的目的是在列表中的每首歌曲結束后,開始下一首。 我想用 for 循環簡化它,但問題是,所有歌曲都突然播放,而沒有等待上一首歌曲播放完畢。 有沒有辦法簡化它?

您可以使用遞歸來實現這一點,通過創建一個 playSong function 來獲取歌曲列表和將要播放的歌曲的索引,當該歌曲完成時,這個 function 將使用下一個索引調用自己,如下所示:

fun playSong(songList: List<Int>, flag: Int) {
    player = MediaPlayer.create(this, songResources.getValue(songList[flag]).rawId)
    player.start()
    player.setOnCompletionListener {
        playSong(player, list, if (flag == list.lastIndex) 0 else flag + 1)
    }
}

if (flag == list.lastIndex) 0 else flag + 1 : 這意味着如果完成的歌曲是最后一首歌 => 播放第一首; else => 播放下一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM