如何暂停for循环的完成,直到满足AudioIsCompletedCondition

时间:2018-09-09 16:53:20

标签: android kotlin multimedia

我有一个PlayAll功能,该功能应该

  1. 在短语列表中循环(在recyclerView中),
  2. 突出显示所选ViewHolder某种颜色
  3. 播放该短语的音频
  4. 将颜色更改回正常,然后重复下一个步骤,移至下一个短语。

我尝试了两种方法:

for (i in termList.indices){
        val viewHolder: RecyclerView.ViewHolder = recyclerView!!.findViewHolderForAdapterPosition(i)
        val mp = MediaPlayer.create (activity, termList[i].audio!!)
        viewHolder.itemView.setBackgroundColor(Color.parseColor("#D3D3D3"))
        mp.setOnCompletionListener {
            viewHolder.itemView.setBackgroundColor(Color.parseColor("#FFFFFF"))
        }
        mp.start ()
    }

通过这种方式一次播放它们,将所有单元格的颜色更改为#D3 ...,并在完成后仅通过将颜色设置为#FFFFFF进行迭代。

fun playAllAudio(i: Int){

    while (i <= termList.size){
        val viewHolder: RecyclerView.ViewHolder = recyclerView!!.findViewHolderForAdapterPosition(i)
        val mp = MediaPlayer.create (activity, termList[i].audio!!)
        viewHolder.itemView.setBackgroundColor(Color.parseColor("#D3D3D3"))
        mp.setOnCompletionListener {
            viewHolder.itemView.setBackgroundColor(Color.parseColor("#FFFFFF"))
            playAllAudio(i+1)
        }
        mp.start ()
    }

这种方式创建了一个播放所有音频直到应用崩溃的反馈循环。

第一种方法不太疯狂,似乎更接近解决方案的实际含义,但我一直在努力寻找解决方案。

先谢谢了。

1 个答案:

答案 0 :(得分:1)

在第二个示例中,将while更改为if,然后将<=更改为<

fun playAllAudio(i: Int){

    if (i < termList.size){
        val viewHolder: RecyclerView.ViewHolder = recyclerView!!.findViewHolderForAdapterPosition(i)
        val mp = MediaPlayer.create (activity, termList[i].audio!!)
        viewHolder.itemView.setBackgroundColor(Color.parseColor("#D3D3D3"))
        mp.setOnCompletionListener {
            viewHolder.itemView.setBackgroundColor(Color.parseColor("#FFFFFF"))
            playAllAudio(i+1)
        }
        mp.start ()
    }
}