当我单击多个按钮时,多个音频开始在 android studio 中同时播放

Posted

技术标签:

【中文标题】当我单击多个按钮时,多个音频开始在 android studio 中同时播放【英文标题】:When i click on multiple buttons, multiple audios start playing at the same time in 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

    



【问题讨论】:

你永远不会在上一个音轨上停止。 我也试过了,但是没用。 【参考方案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 不起作用。我试过了,但没有得到预期的结果。

以上是关于当我单击多个按钮时,多个音频开始在 android studio 中同时播放的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio:单击按钮时一一更新多个按钮的背景

当我单击listview按钮在Android上播放声音时[关闭]

在android的listview中实现音频播放器

Android Listview 多个按钮点击

单击应用程序按钮时立即运行音频文件 (Android)

SwiftUI - 在按钮单击时添加一行多个文本字段/视图