在 RecyclerView 中播放下一首音乐时播放图标更改前的问题

Problem With Change Before Play Icon When Playing Next Music In The RecyclerView

我是 android 开发新手。 我有两个音乐列表,我可以完全获取和播放这些音乐并将其图标从播放更改为暂停等。 但我在播放之前遇到了一个大问题。 为了解决这个问题,我搜索了过去一天和今天的所有内容,并阅读了很多代码以找到更改的最佳条件。

主要问题: 当我在 play_btn 上点击第一个时,我的音乐开始播放。没关系。 当我点击 play_btn 正在播放音乐时,它会将图标更改为暂停并且其音乐将停止; 当我点击下一个回收行时出现问题。我过去的 btn_play 图标没有改变。

viewHolder.btn_play.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {

    if (oldPosition == -1) {
      if (!isMediaPlayerPlaying) {
        mediaPlayer = new MediaPlayer();
        switch (listName) {
          case "sabah": {
            mediaPlayer = MediaPlayer.create(G.app, sabahMusics.get(position));
            break;
          }
          case "masae": {
            mediaPlayer = MediaPlayer.create(G.app, masaeMusics.get(position));
            break;
          }
        }
        Log.i("hdev", "boolean is: " + isMediaPlayerPlaying);
        mediaPlayer.start();
        isMediaPlayerPlaying = !isMediaPlayerPlaying;
        oldPosition = position;
      } else {
        mediaPlayer.pause();
        isMediaPlayerPlaying = !isMediaPlayerPlaying;
      }
    }
    if (oldPosition != position) {

    }

      if (mediaPlayer.isPlaying()) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.pause));
        }
      } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.play));
        }
      }

      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
          Log.i("hdev", "Prepaired Prepaired Prepaired");
        }
      });
      mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.play));
          }
        }
      });

  }
});

我通过限制我的用户回答了这个问题:

viewHolder.btn_play.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
    takeView = view;
    if (oldPosition == -1 || oldPosition == position) {
      if (!isMediaPlayerPlaying) {
        mediaPlayer = new MediaPlayer();
        switch (listName) {
          case "sabah": {
            mediaPlayer = MediaPlayer.create(G.app, sabahMusics.get(position));
            break;
          }
          case "masae": {
            mediaPlayer = MediaPlayer.create(G.app, masaeMusics.get(position));
            break;
          }
        }
        Log.i("hdev", "boolean is: " + isMediaPlayerPlaying);
        mediaPlayer.start();
        isMediaPlayerPlaying = !isMediaPlayerPlaying;
        oldPosition = position;
      } else {
        mediaPlayer.pause();
        oldPosition = -1;
        isMediaPlayerPlaying = !isMediaPlayerPlaying;
      }
      if (mediaPlayer.isPlaying()) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.pause));
        }
      } else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.play));
        }
      }
      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
          Log.i("hdev", "Prepaired Prepaired Prepaired");
        }
      });
      mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mediaPlayer) {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            viewHolder.btn_play.setBackground(G.app.getDrawable(R.drawable.play));
          }
        }
      });
    } else  {
      MediaPlayer waterMediaPlayer = new MediaPlayer();
      waterMediaPlayer = new MediaPlayer();
      waterMediaPlayer = MediaPlayer.create(G.app, R.raw.water);
      waterMediaPlayer.start();
      animateShake(viewHolder.btn_play);
      Snackbar.make(view.getRootView() ,"Something to show Err for user", 2000).show();

    }
  }
});