[英]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.