簡體   English   中英

使用片段和選項卡布局在適配器中按回時停止 MediaPlayer

[英]stop MediaPlayer when back pressed in adapter using fragment and tablayout

所以,我的應用程序有問題。 我想構建應用音頻播放器。 我希望這個應用程序可以在 tablayout 上播放片段中的音頻。 我把音樂播放器放在適配器里。 當我運行它並嘗試播放音頻時,它運行良好,但是當活動關閉或我按下 onBackPressed 時我無法停止它。 回到以前的活動時如何停止音樂播放器?

所以這是我的適配器

class AudioAdapter(private val data: ArrayList<DataQuran>,
               private val listener: (DataQuran)-> Unit): RecyclerView.Adapter<AudioViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AudioViewHolder {
    return AudioViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_audio,null,false))
}

override fun getItemCount(): Int {
    return data.size
}

override fun onBindViewHolder(holder: AudioViewHolder, position: Int) {
    holder.bindItem(data[position],position)
    holder.itemView.onClick {
        listener(data[position])
    }
}

}

這是我在適配器 class 中的 viewholderclass

class AudioViewHolder(view: View): RecyclerView.ViewHolder(view) {

private var mediaPlayer: MediaPlayer = MediaPlayer()

private val nomor: TextView = view.findViewById(R.id.nomer_urut)
private val namaSurah: TextView = view.findViewById(R.id.nama_surah)
private val ayat: TextView = view.findViewById(R.id.ayat)
private var buttonPlay: ImageView = view.findViewById(R.id.button_play)

@SuppressLint("SetTextI18n")
fun bindItem(dataQuran: DataQuran, position: Int){
    var posisi = position+1
    nomor.text  = posisi.toString()
    namaSurah.text = dataQuran.namaSurah
    ayat.text = "Ayat "+dataQuran.ayat
    var url_audio = "http://tahfidzta.doaqu.or.id/surah/${dataQuran.namaFile}"

    try {
        mediaPlayer.setDataSource(url_audio)
        mediaPlayer.prepare()
    }catch (e: IOException){
        e.printStackTrace()
    }


    buttonPlay.setOnClickListener {
        if (mediaPlayer.isPlaying){
            buttonPlay.setImageResource(R.drawable.ic_play)
            mediaPlayer.pause()
        }else{
            buttonPlay.setImageResource(R.drawable.ic_pause)
            mediaPlayer.start()
        }
    }

}

}

這是我的片段之一

@Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")

class TirukanAyatFragment: Fragment() { var listData: ArrayList = ArrayList() lateinit var adapter: AudioAdapter

companion object {
    const val KATEGORI = "kategori"
    const val AUDIO = "audio"
    const val SURAH = "surah"
    const val AYAT = "ayat"
}

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_tirukan_ayat, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    recycler_tirukan.setHasFixedSize(true)
    recycler_tirukan.layoutManager = LinearLayoutManager(context)
    ApiService.create()
        .getAudio()
        .enqueue(object : retrofit2.Callback<DataQuran>{
            override fun onFailure(call: Call<DataQuran>, t: Throwable) {
                toast(t.localizedMessage)
            }

            override fun onResponse(call: Call<DataQuran>, response: Response<DataQuran>) {
                val data = response.body()?.data
                for (audio in data!!){
                    if (audio.kategori == "Tirukan Ayat"){
                        listData.add(audio)
                    }
                }
                adapter = AudioAdapter(listData){
                    startActivity<AudioActivity>(
                        AUDIO to it.namaFile,
                        AYAT to it.ayat,
                        KATEGORI to it.kategori,
                        SURAH to it.namaSurah
                    )
                }

                recycler_tirukan.adapter = adapter
            }

        })
}

}

我試圖從片段中移動 object MediaPlayer,但出現錯誤“attachNewPlayer”。 請幫忙,有什么解決辦法嗎?

默認情況下,onBackPressed 會銷毀您當前的 Activity,但在此之前應該調用 onDetach。 嘗試在此功能內暫停 MediaPlayer,甚至釋放您的媒體播放器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM