Как приостановить завершение цикла for, пока не будет выполнено условие AudioIsCompletedCondition - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть функция PlayAll, которая должна

  1. цикл по списку фраз (в программе recyclerView),
  2. выделите выбранный ViewHolder определенного цвета
  3. воспроизвести аудио этой фразы
  4. измените цвет на нормальный и перейдите к следующей фразе, повторяя все предыдущие шаги.

Я пробовал 2 способа:

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 голосов
/ 09 сентября 2018

Измените 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 ()
    }
}
...