【问题标题】:When i click on multiple buttons, multiple audios start playing at the same time in android studio当我单击多个按钮时,多个音频开始在 android studio 中同时播放
【发布时间】:2021-07-27 19:30:05
【问题描述】:

当我单击 recyclerview 的多个图像时,会开始播放多个音频,而不会停止前一个。它越来越烦人。我希望有人能帮我解决这个问题。我读过关于单例类并且只使用一个媒体播放器实例,但不明白如何正确实现它。

class RecylerViewAdapter (var context: Context, var arrayList: ArrayList<ItemModel>) :
    RecyclerView.Adapter<RecylerViewAdapter.ItemHolder>() {

    var mediaPlayer: MediaPlayer? = null

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder {

        val viewHolder = LayoutInflater.from(parent.context)
            .inflate(R.layout.sound_item_list, parent, false)
        return ItemHolder(viewHolder)

    }

    override fun onBindViewHolder(holder: ItemHolder, position: Int) {

        val itemModel: ItemModel = arrayList[position]

        holder.soundImage.setImageResource(itemModel.soundImage)
        holder.soundTitle.text = itemModel.soundTitle

        mediaPlayer = MediaPlayer.create(context, itemModel.soundTrack)
        mediaPlayer!!.isLooping = true

        holder.soundImage.setOnClickListener {
            Toast.makeText(context, itemModel.soundTitle, Toast.LENGTH_LONG).show()
            mediaPlayer!!.start()
        }

    }


    override fun getItemCount(): Int {

        return arrayList.size

    }

    class ItemHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        var soundImage = itemView.soundImage
        var soundTitle = itemView.soundTitle

    }


}

【问题讨论】:

  • 你永远不会在上一个音轨上停止。
  • 我也试过了,但是没用。

标签: java android xml kotlin android-recyclerview


【解决方案1】:

代码看起来不错。请记住在播放器上调用release() 并在播放之前使用新的媒体文件再次对其进行初始化。也许实现一个MediaPlayer.OnCompletionListener 可能对您有用,您可以在其中调用player.release()

或许这已经足够了:

holder.soundImage.setOnClickListener {
        mediaPlayer!!.release()
        mediaPlayer = null
        mediaPlayer = MediaPlayer.create(context, itemModel.soundTrack)
        Toast.makeText(context, itemModel.soundTitle, Toast.LENGTH_LONG).show()
        mediaPlayer!!.start()
    }

【讨论】:

  • 嗨,马塞尔,感谢您帮助我。不胜感激,但是建议的代码仍然无法正常工作,我也面临同样的问题。你有其他方法吗??
  • 您是否尝试过在您的播放器对象上实现 on CompletionListener?
  • 是的,但在这种情况下,应用程序崩溃了。
  • 这不应该发生 :D 我相信 onCompletionListener 将是你的关键。你有没有像第 18 章那样尝试过? myandroid.site/…
  • 媒体播放器设置为循环播放,所以我认为 onCompletionListener 不起作用。我试过了,但没有得到预期的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多