[英]How to stop mediaPlayer when back button is pressed or other audio button is pressed?
[英]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.