我创建了一个列表视图,其中包含曲目列表,播放和暂停图像。当点击播放图像时,暂停图像变为可见并点击暂停,播放图像将变得可见。问题是当我点击播放时向下滚动我看到另一个列表项显示暂停图像,当我向下滚动更多另一个列表项显示暂停图像。这是因为列表重新显示一个显示重复的图像。在研究问题我想我需要在getView中放置if-else语句方法,但我没有实现正确的代码来解决这个问题.plzz帮助我解决这个问题..
答案 0 :(得分:1)
在SoundCloud
类中使用名称isPlaying
创建一个新的布尔变量。为它创建getter setter,就像你为其他变量所做的那样。
从SoundCloudList
获取对象:
SoundCloug soundCloud = (SoundCloud) getItem(position);
此对象可以在您使用soundcloudList.get(position)
的任何位置使用,因此可以轻松实现,因为我们不必每次都获取对象。
然后在getView
中使用isPlaying
在每个位置显示播放/暂停按钮,如下所示:
if(soundCloud.isPlaying()){
holder.img1.setVisibility(View.VISIBLE);
holder.img2.setVisibility(View.GONE);
}
else{
holder.img1.setVisibility(View.GONE);
holder.img2.setVisibility(View.VISIBLE);
}
然后在onClickListeners
中,设置isPlaying
的值,如下所示:
holder.img1.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(final View v) {
soundCloud.setPlaying(true);
try {
notifyDataSetChanged();
holder.img1.setVisibility(View.INVISIBLE);
holder.img2.setVisibility(View.VISIBLE);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDataSource("http://api.soundcloud.com/tracks/" + soundcloudList.get(position).getId() + "/stream?client_id=e13865f9debacb5f96375fdd96b7fa1b");
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
mp.start();
}
});
mMediaPlayer.setOnCompletionListener(
new MediaPlayer.OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
mMediaPlayer.release();
mMediaPlayer = null;
holder.img1.setVisibility(View.VISIBLE);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
holder.img2.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(final View v)
{
soundCloud.setPlaying(false);
notifyDataSetChanged();
holder.img1.setVisibility(View.VISIBLE);
holder.img2.setVisibility(View.INVISIBLE);
if(mMediaPlayer!=null)
{
mMediaPlayer.release();
mMediaPlayer = null;
}
}
});
此代码不会显示多行上重复播放/暂停按钮,因为现在,我们正在检查getView
中每一行的音频播放/暂停,然后才设置按钮可见性。