저는 현재 안드로이드와 현재 RecyclerView를 배우고 있습니다. 따라서이 예제에서는 재생 버튼을 클릭하고 완료되면 특정 원시 사운드 파일을 재생하고 있습니다. 나는 매우 빠르게 재생 누르면 내가 IllegalStateException이를 얻을 것이다, 그래서 나는 상태를 환승에 문제가RecyclerView에서 오디오 재생 및 해제
- : 나는 진지하게 내가 몇 가지 문제와 질문이 그러나 가장 좋은 방법이 무엇인지에 대한 몇 가지 포인터를 사용할 수 있습니다, 아마도 이미 출시 된 플레이어를 출시하려고 시도했을 것입니다.
- 나는 분명히 또한 출시 후 무효화해야하고 null을 먼저 확인해야합니다. 그러나 중첩 된 범위에서 사용하고 있기 때문에 최종 선언해야하고 혼동을 일으킬 수 없습니다. 분명히 놓쳤습니다. 어떤 것. onBindViewHolder의 항목에 clickListner을 설정
- 도 크게 느린과 viewHolder 클래스의 전체 행에 clickListner을 추가하는 것보다 덜 반응하는 것 같다.
당신의 MediaPlayer를 설정 및 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