【问题标题】:How to pause the completion of a for loop until the AudioIsCompletedCondition is met如何暂停 for 循环的完成,直到满足 AudioIsCompletedCondition
【发布时间】:2018-09-09 16:53:19
【问题描述】:

我有一个 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】:

    在第二个示例中将您的while 更改为if,并将&lt;= 更改为&lt;

    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 ()
        }
    }
    

    【讨论】:

    • 为什么我只能在 6 分钟内接受答案?我花了 3 秒钟才看到您的答案完全正确。谢谢!
    • @Glenncito 这是为了让其他人有时间发布自己的答案,这可能比发布的第一个更好。仍然有可能有人会有更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2016-04-12
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多