所以我有這樣的代碼
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回圈來簡化它,但問題是,所有的歌曲都突然播放而沒有等待上一首歌曲完成。有沒有辦法簡化它?
uj5u.com熱心網友回復:
您可以使用遞回來實作這一點,方法是創建一個 playSong 函式,該函式獲取歌曲串列和將要播放的歌曲的索引,當歌曲完成時,此函式將使用下一個索引呼叫自身,如下所示:
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 => 播放下一個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/511237.html
