简体   繁体   中英

Mediaplayer how to avoid playing multiple audios in a RecyclerView

i have built a list of my music (RecyclerView) in each item there are two buttons first to play the music and pause the second to stop but when i click play for two audios the two launches while i want the first one to stop. here is my adapter (the flag is to change th image view from play to pause when the audio is played)

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();
}}

thank you

try add mediaPlayer.stop(); and mediaPlayer.reset(); before start mediaPlayer use below code in click event

 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);
        }
    }
});

this may help..

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) {
}

            }
        }
    });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM