只需单击一下即可更改listview中的每个图像视图资源

时间:2017-04-11 15:25:26

标签: android listview adapter custom-adapter

我有一个列表视图,其中包含每行中有播放和暂停按钮的歌曲。 我的列表视图中没有两个暂停图标(两首播放歌曲)所以我需要先重置所有这些才能播放图标然后将所选视图设置为暂停图标.. 我怎样才能做到这一点 ?或者你能为此提供更好的解决方案吗?

这是我的代码:

在模型类(产品)中:

public int currentPosition= -1;
适配器

中的

    public interface PlayPauseClick {
    void playPauseOnClick(int position);
}
private PlayPauseClick callback;
public void setPlayPauseClickListener(PlayPauseClick listener) {
    this.callback = listener;
}
.
.
.


    holder.playPauseHive.setImageResource(product.getPlayPauseId());
    holder.playPauseHive.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (callback != null) {
                callback.playPauseOnClick(position);
                if (position == product.currentPosition) {
                    product.setPlayPauseId(R.drawable.ic_pause);
                    //set the image to pause icon
                }else{
                    //set the image to play icon
                    product.setPlayPauseId(R.drawable.ic_play);
                }
                notifyDataSetChanged();
            }
        }
    });

我的活动中的回调:

@Override
public void playPauseOnClick(int position) {
    final Product product = songList.get(position);
    if(product.currentPosition == position){
        product.currentPosition = -1; //pause the currently playing item
    }else{
        product.currentPosition = position; //play the item
    }
    this.adapter.notifyDataSetChanged();
}

1 个答案:

答案 0 :(得分:0)

对于我的情况,我使用变量来存储当前的游戏项目位置。让我们说

int x = -1; //-1 can indicate nothing was currently playing

所以在playPauseOnClick()你可以做这样的事情

@Override
public void playPauseOnClick(int position) {
    if(x == position){
        x = -1; //pause the currently playing item
    }else{
        x = position; //play the item
    }
    this.adapter.notifyDataSetChanged();
}  

我删除product.setPlayPauseId()的原因是因为您真的不需要它们。您只需根据我之前创建的x变量设置播放或暂停图标。在getView()

中执行此类操作
Product product = songList.get(position);
if (position == x) { 

    //set the image to pause icon
}else{
    //set the image to play icon
}

因此,一旦您致电adapter.notifyDataSetChanged(),您的适配器将为您完成所有工作。每当x变量值为-1时,图标都不会显示暂停图标,这也可以确保只有一个位置也会显示暂停图标。

希望对你有所帮助。