【问题标题】:MediaPlayer didn't play only one song at a time in Android Studio (JAVA)MediaPlayer 在 Android Studio (JAVA) 中一次不只播放一首歌曲
【发布时间】:2021-03-26 08:56:10
【问题描述】:

我想制作一个简单的音乐播放器应用,可以播放选定播放列表中的歌曲。我成功检索了设备歌曲的详细信息。 我有一个多首歌曲的播放列表。我想一次只播放一首歌。但是当我点击其他已经播放的歌曲时,歌曲并没有停止或暂停。请给出一个完整的解决方案。

 ArrayList<SongModel> list;

SongModel 模型类

public class SongModel {

 String songImg,songName,songPath;
 Boolean isClick;

 public SongModel(String songImg, String songName, String songPath, Boolean isClick) {
    this.songImg = songImg;
    this.songName = songName;
    this.songPath = songPath;
    this.isClick = isClick;
 }

 public Boolean getClick() {
    return isClick;
 }

 public void setClick(Boolean click) {
    isClick = click;
 }

 public String getSongPath() {
    return songPath;
 }

 public void setSongPath(String songPath) {
    this.songPath = songPath;
 }

 public String getSongImg() {
    return songImg;
 }

 public void setSongImg(String songImg) {
    this.songImg = songImg;
 }

 public String getSongName() {
    return songName;
 }

 public void setSongName(String songName) {
    this.songName = songName;
  }
}

适配器中使用的MediaPlayer

 MediaPlayer mediaPlayer = MediaPlayer.create(context, Uri.parse(list.get(position).getSongPath()));
    if(list.get(position).getClick()){
        holder.imgv_pause.setVisibility(View.VISIBLE);
        holder.imgv_play.setVisibility(View.GONE);
        try {
            mediaPlayer.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    } else {
        list.get(position).setClick(false);
        holder.imgv_pause.setVisibility(View.GONE);
        holder.imgv_play.setVisibility(View.VISIBLE);
        try {
            mediaPlayer.pause();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    holder.imgv_play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            for (int i=0;i<list.size();i++){
                list.get(i).setClick(false);
            }
            list.get(position).setClick(true);
            notifyDataSetChanged();
        }
    });

    holder.imgv_pause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            list.get(position).setClick(false);
            notifyDataSetChanged();
        }
    });
}

【问题讨论】:

标签: java android android-mediaplayer


【解决方案1】:

用户在onViewRecycled滚动时需要停止上一首歌曲当用户滚动recycler-view时调用此函数。

 @Override
    public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
        super.onViewRecycled(holder);
      //stop song by its holder here
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多