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

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

我有一个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 ()
    }

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

第一种方式不那么疯狂,似乎更接近解决方案实际上是什么,但我正在努力弄明白。

提前致谢。

android kotlin multimedia
1个回答
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 ()
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.