我正在学习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