我正在學習android和RecyclerView,因此在本例中,我點擊播放按鈕播放特定的原始聲音文件,然後在播放完成後播放。 我可以認真地用的是什麼,不過最好的做法,因爲我有幾個問題和問題的一些指針:播放和釋放RecyclerView中的音頻
- 我有一個過渡狀態的問題,所以如果我按得很快發揮我會得到一個IllegalStateException異常,可能來自試圖釋放已經發布的玩家。
- 我應該顯然也在發佈後取消,並做一個null檢查之前,但由於我在嵌套範圍內使用它必須被宣佈爲最終的,不能被忽略,這是混亂,我顯然錯過了一些東西。
- 設置在項目上的clickListner在onBindViewHolder似乎也顯著慢,比viewHolder類整行上添加clickListner不太敏感。
什麼是設置你的媒體播放器,並與RecyclerView正確管理您的資源,我在做什麼錯,將導致崩潰和「緩慢」的最佳做法?
// ViewHolder
public static class myHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
ImageView playBtn;
public myHolder(View v){
super(v);
playBtn = (ImageView) v.findViewById(R.id.playBtn);
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
}
}
// onBindViewHolder/onCompletionListener
@Override
public void onBindViewHolder(myHolder holder, int position) {
myClass item = itemList.get(position);
final MediaPlayer mediaPlayer = MediaPlayer.create(holder.itemView.getContext(), item.getAudioSource());
holder.playBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
}
});
}
你爲什麼要「聆聽」媒體播放器?如果您需要對用戶交互做出反應,爲什麼不添加兩個監聽器:onLongClick()和onClick()。 LongClick可以啓動,當用戶停止按下時,onClick()將自動調用,您可以停止播放。 – Gotiasits
我並不需要停止播放,我使用的聲音文件只有1-2秒長。 setOnCompleteListener是這樣的,當文件完成播放時,它將釋放所有資源,如果這就是你的意思。 – LuckyXII