1

各項目に自分の音楽(RecyclerView)のリストを作成しました。最初に2つのボタンがあり、2番目のボタンは一時停止しますが、私は最初のものを止めたいと思っている間に2つの起動します。ここに私のアダプタ Mediaplayer RecyclerViewで複数のオーディオを再生しないようにする方法

public class ViewAudioListAdapter extends RecyclerView.Adapter<ViewAudioListAdapter.ViewHolder>{ 
private List<Audio> values; 
private Context context; 
private MediaPlayer mediaPlayer; 
private boolean flage = true; 



public class ViewHolder extends RecyclerView.ViewHolder { 
    public TextView textViewName; 
    public ImageView ivPlay,ivStop; 
    public View layout; 


    public ViewHolder(View view) { 
     super(view); 
     this.textViewName = (TextView) view.findViewById(R.id.textViewName); 
     this.ivPlay = (ImageView) view.findViewById(R.id.ivPlay); 
     this.ivStop = (ImageView) view.findViewById(R.id.ivStop); 

     this.layout = view; 
    } 
} 

public void add(int position, Audio audio){ 
    values.add(position, audio); 
    notifyItemInserted(position); 
} 

public void remove(int position){ 
    values.remove(position); 
    notifyItemRemoved(position); 
} 

public ViewAudioListAdapter(List<Audio> myDataset, Context context) { 
    values = myDataset; 
    this.context=context; 
} 


@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
    View v = inflater.inflate(R.layout.view_audio_item, parent, false); 
    v.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     } 
    }); 
    // set the view's size, margins, paddings and layout parameters 
    ViewHolder vh = new ViewHolder(v); 
    return vh; } 

@Override 
public void onBindViewHolder(final ViewAudioListAdapter.ViewHolder holder, int position) { 
    final Audio audio = new Audio(values.get(position)); 
    final String name = audio.getName(); 


    holder.textViewName.setText(name); 

    holder.ivPlay.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (flage){ 
       mediaPlayer = MediaPlayer.create(context , Uri.parse(url)); 
       flage = false ; 
      } 
      if (mediaPlayer.isPlaying()){ 
       mediaPlayer.pause(); 
       holder.ivPlay.setImageResource(R.drawable.icons_play); 
      }else{ 
       mediaPlayer.start(); 
       holder.ivPlay.setImageResource(R.drawable.icons_pause); 
      } 
     } 
    }); 

    holder.ivStop.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (!flage){ 
       mediaPlayer.stop(); 
       mediaPlayer.release(); 
       flage = true; 
      } 
      holder.ivPlay.setImageResource(R.drawable.icons_play); 
     } 
    }); 
} 


@Override 
public int getItemCount() { 
    return values.size(); 
}} 

はあなたに

+0

チェックこのhttps://stackoverflow.com/questions/46040158/playing-and-releasing-audio-in-recyclerview –

答えて

0

に感謝クリックでコードの下、スタートMediaPlayerの使用前にmediaPlayer.stop();mediaPlayer.reset();を追加してみてください(フラグは音声が再生されたときに一時停止するプレーから番目の画像表示を変更することである)でありますイベント

holder.ivPlay.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     if (flage){ 
      mediaPlayer = MediaPlayer.create(context , Uri.parse(url)); 
      flage = false ; 
     } 
     if (mediaPlayer.isPlaying()){ 
      mediaPlayer.pause(); 
      holder.ivPlay.setImageResource(R.drawable.icons_play); 
     }else{ 
      mediaPlayer.stop();//add here 
      mediaPlayer.reset();//update here 
      mediaPlayer = MediaPlayer.create(context , Uri.parse(url));// new update here 
      mediaPlayer.start(); 
      holder.ivPlay.setImageResource(R.drawable.icons_pause); 
     } 
    } 
}); 

これは役立つかもしれない...

OR

holder.ivPlay.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (flage){ 
       mediaPlayer = MediaPlayer.create(context , Uri.parse(url)); 
       flage = false ; 
      } 
      if (mediaPlayer.isPlaying()){ 
       mediaPlayer.pause(); 
       holder.ivPlay.setImageResource(R.drawable.icons_play); 
      }else{ 

       try { 

        if (mediaPlayer.isPlaying()) { 
        mediaPlayer.stop(); 
        mediaPlayer.release(); 
         mediaPlayer = MediaPlayer.create(context , Uri.parse(url)); 
           } 

       mediaPlayer.start(); 
       holder.ivPlay.setImageResource(R.drawable.icons_pause); 
} catch (Exception e) { 
} 

      } 
     } 
    }); 
+0

java.lang.IllegalStateException mediaPlayer.startで – Achraf

+0

試し**リセット()* *代わりに** release()**更新されたコードを確認 – Omi

+0

リセットしても音楽は再生されません – Achraf

関連する問題