Android 我无法更新屏幕组件
我在ListView中有一个玩家列表。每个项目都有两个启动和停止按钮。当我点击开始颜色时,开始按钮变红并开始移动搜索栏。单击“停止”按钮时,“开始”颜色为黑色,seekbar进度变为零。当歌曲结束时,颜色按钮“开始”也变为黑色,seekbar进度变为零Android 我无法更新屏幕组件,android,android-adapter,android-seekbar,Android,Android Adapter,Android Seekbar,我在ListView中有一个玩家列表。每个项目都有两个启动和停止按钮。当我点击开始颜色时,开始按钮变红并开始移动搜索栏。单击“停止”按钮时,“开始”颜色为黑色,seekbar进度变为零。当歌曲结束时,颜色按钮“开始”也变为黑色,seekbar进度变为零 holder.start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v
holder.start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
releaseMP();
startPlayProgressUpdater(holder.seekBar, holder.start);
try {
mediaPlayer = new MediaPlayer();
global_position = position;
mediaPlayer.setDataSource(recordBeans.get(global_position).getFile());
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
holder.seekBar.setMax(mediaPlayer.getDuration());
mediaPlayer.start();
recordBeans.get(global_position).setPlay(true);
holder.start.setTextColor(Color.RED);
startPlayProgressUpdater(holder.seekBar, holder.start);
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
releaseMP();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
});
这是通过以下方法实现的:
public void startPlayProgressUpdater(final SeekBar seekBar, final Button start) {
if (mediaPlayer != null) {
recordBeans.get(global_position).setSeekPos(mediaPlayer.getCurrentPosition());
if ((Integer) seekBar.getTag() == global_position) {
seekBar.setProgress(recordBeans.get(global_position).getSeekPos());
}
Runnable notification = new Runnable() {
public void run() {
startPlayProgressUpdater(seekBar, start);
}
};
handler.postDelayed(notification, 1000);
} else {
recordBeans.get(global_position).setPlay(false);
start.setTextColor(Color.BLACK);
recordBeans.get(global_position).setSeekPos(0);
seekBar.setProgress(0);
}
}
当我单击“停止”或歌曲结束时,播放器变为空,颜色按钮再次更改。它在所有这些方法中实现:
holder.stop.SetOnClickListener新建视图.OnClickListener{
@Override
public void onClick(View v) {
if ((Integer) v.getTag() == global_position && mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
});
及
如果我在播放歌曲时工作,请单击“开始另一首歌曲”。即,新歌曲开始播放,颜色按钮“开始”变为红色,“上一个”按钮“再次开始”变为黑色,则我希望使用相同的功能
为此,当您单击开始调用方法时:
releaseMP();
startPlayProgressUpdater(holder.seekBar, holder.start);
这个方法是有效的,但是数据没有被清除。但是如果我点击Stop,那么之前所有歌曲的数据都被清除了。我做错了什么
我想你的意思是调用reset,而不是单击stop按钮中的release。试着在顶部的主容器中调用release
reset()
此方法重置媒体播放器
release()
此方法释放与MediaPlayer对象连接的任何资源您所说的数据是什么意思?您丢失了进度条位置,或者完全丢失了歌曲?进度条位置和开始按钮颜色当歌曲结束时,称为releaseMP;并且全部清除,但当您单击开始时,我调用相同的方法,但它无法解决问题I它不适用于播放器和seekbar按钮。更准确地说,是使用方法调用,该调用会清除它们。在recordBeans.getglobal_position.setPlayfalse;start.setTextColorColor.BLACK;recordBeans.getglobal_position.setSeekPos0;seekbar.setProgress0;recordBeans.getglobal_position.setPlayfalse;和recordBeans.get中global_position.setSeekPos0;已正确触发,但更新失败
release()