【问题标题】:Mediaplayer how to avoid playing multiple audios in a RecyclerViewMediaplayer 如何避免在 RecyclerView 中播放多个音频
【发布时间】:2017-12-06 09:32:56
【问题描述】:

我在每个项目中建立了我的音乐列表(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();
}}

谢谢

【问题讨论】:

标签: android android-mediaplayer android-adapter android-recyclerview


【解决方案1】:

尝试在启动媒体播放器之前添加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);
        }
    }
});

这可能会有所帮助..

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

            }
        }
    });

【讨论】:

  • mediaPlayer.start 中的 java.lang.IllegalStateException
  • 尝试 reset() 而不是 release() 检查更新的代码
  • 重置后根本不播放音乐
  • 用你的介词我失去了暂停功能,因为你做了一个“mediaPlayer.create”
猜你喜欢
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多