java - 布尔值不会从真返回假
问题描述
我在列表视图中播放 mp3 歌曲。当我单击 shuffle 按钮时,它的突出显示并保持集中色彩,这一刻布尔值变为真。然后,当我再次单击随机播放按钮时,突出显示消失了,此时布尔值应该为假,随机播放应该停止播放歌曲。
但不幸的是,布尔值不会从真返回到假,它始终保持为真。我不明白为什么,因为我做得很好。主要目的是当第一首歌曲结束时,它应该开始第二首,然后是第三首......但是由于布尔值不会返回到之前的状态(false),即使我点击了随机播放按钮,它仍然会继续播放歌曲。
编辑这是我放视频以便更容易理解
这是我的代码:
public class MainActivity extends AppCompatActivity {
ListView lv;
MediaPlayer mediaPlayer;
private boolean isShuffle = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
btnshuffle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
if (isShuffle) {
isShuffle = false;
Toast.makeText(getApplicationContext(), "Shuffle is OFF", Toast.LENGTH_SHORT).show();
if(mediaPlayer.isPlaying())
{
mediaPlayer.pause();
buttonPlayPause.setBackgroundResource(R.drawable.ic_play_arrow_black_24dp);
}
else
{
mediaPlayer.start();
buttonPlayPause.setBackgroundResource(R.drawable.ic_pause_black_24dp);
}
SetTimeTotal();
TimeDuration();
btnshuffle.setBackgroundResource(R.drawable.shuffletouch);
oncompletiononce();
} else {
initcommands();
isShuffle = true;
Toast.makeText(getApplicationContext(), "Shuffle is ON", Toast.LENGTH_SHORT).show();
buttonPlayPause.setBackgroundResource(R.drawable.ic_pause_black_24dp);
isRepeat = false;
btnshuffle.setBackgroundResource(R.drawable.shuffletouchfocused);
repeat.setBackgroundResource(R.drawable.btn_repeat);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
nextsong();
UpdateTimeSong();
}
});
buttonPlayPause.setBackgroundResource(R.drawable.ic_pause_black_24dp);
isRepeat = false;
btnshuffle.setBackgroundResource(R.drawable.shuffletouchfocused);
repeat.setBackgroundResource(R.drawable.btn_repeat);
}
}
});
public void nextsong () {
position++;
if(position > arraySong.size()-1)
{
position = 0;
}
if(mediaPlayer.isPlaying())
{
mediaPlayer.pause();
}
CreateMediaPlayer();
//audioPlayer.startPlayer(position);
mediaPlayer.start();
buttonPlayPause.setBackgroundResource(R.drawable.ic_pause_black_24dp);
closebutton.setBackgroundResource(R.drawable.ic_highlight_off_black_24dp);
initcommands();
oncompletiononce();
}
private void UpdateTimeSong()
{
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//check time song -> if end -> next
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
position++;
if (position > arraySong.size() - 1) {
position = 0;
}
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
CreateMediaPlayer();
mediaPlayer.start();
buttonPlayPause.setBackgroundResource(R.drawable.ic_pause_black_24dp);
SetTimeTotal();
UpdateTimeSong();
}
});
handler.postDelayed(this, 500);
}
},100);
}
}
解决方案
- 尝试在 initcommands() 之前分配 isShuffle。
- 如果第一个选项不起作用,请尝试将 isShuffle 分配为 onClick() 中的第一行,然后根据 isShuffle 状态执行操作。
推荐阅读
- docker - 在 windows server 2016 docker 容器上托管了一个 .net core api,在调用 docker start 时,状态为 Exited (2147516566) 而不是 UP
- php - 我正在使用 Quickbooks online v3 php sdk,但找不到如何添加与购买关联的供应商或添加交易日期
- java - @SessionAttributes,如何实际使用它
- javascript - 字符串替换某些匹配组,而不是整个匹配
- dynamics-crm - 从 Batch Request 中的 D365 中删除数据,得到错误 'Content-Type' Header is missing
- usb - USB 3.0 集线器作为 USB 2.0 设备(以及相应的下游设备)连接
- ruby - 在单独的 GET 调用中使用解析的响应
- vue.js - vue将对象数组作为道具传递不起作用
- python - 如何确保 python 密码生成器的安全随机化
- java - 如何将画布正确添加到 JPanel