代码之家  ›  专栏  ›  技术社区  ›  Glenncito

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

  •  0
  • Glenncito  · 技术社区  · 6 年前

    我有一个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 回复  |  直到 6 年前
        1
  •  1
  •   TheWanderer    6 年前

    改变你的想法 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 ()
        }
    }