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

问题描述 投票:0回答:1

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

  }
});
android-recyclerview adapter android-arrayadapter recycler-adapter android-adapter
1个回答
0
投票

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

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

    }
  }
});
© www.soinside.com 2019 - 2024. All rights reserved.