如何暂停 for 循环的完成,直到满足 AudioIsCompletedCondition
How to pause the completion of a for loop until the AudioIsCompletedCondition is met
我有一个 PlayAll 函数,它应该
- 循环浏览短语列表(在 recyclerView 中),
- 以某种颜色突出显示选定的 ViewHolder
- 播放该短语的音频
- 将颜色改回正常颜色,然后移动到下一个短语,重复之前的所有步骤。
我试过两种方法:
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 ()
}
这种方式创建了一个播放所有音频直到应用程序崩溃的反馈循环。
第一种方法不那么疯狂,似乎更接近实际的解决方案,但我正在努力弄清楚。
提前致谢。
在第二个示例中将 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 ()
}
}
我有一个 PlayAll 函数,它应该
- 循环浏览短语列表(在 recyclerView 中),
- 以某种颜色突出显示选定的 ViewHolder
- 播放该短语的音频
- 将颜色改回正常颜色,然后移动到下一个短语,重复之前的所有步骤。
我试过两种方法:
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 ()
}
这种方式创建了一个播放所有音频直到应用程序崩溃的反馈循环。
第一种方法不那么疯狂,似乎更接近实际的解决方案,但我正在努力弄清楚。
提前致谢。
在第二个示例中将 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 ()
}
}