图像视图在单击两次后更改图像



我的片段中有一个方法(目的是在单击后将列表视图图像更改为另一个图像(。我在适配器中调用此方法。现在,当我单击该图像视图时,没有任何反应..当我再次单击它时,它可以工作.(此图像视图是一个播放和暂停按钮,因此当我单击它以将其转换为播放图标时,我必须再次单击两次,依此类推........

这是我在片段中的方法:

 @Override
public void imageButtonOnClick(View v, int position) {
    playPause=(ImageView)v.findViewById(R.id.playPause);
    Product m = productList.get(position);
    playPause.setImageResource(m.getPlayPauseId());
    playPause.setTag(position);
    playPause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                int pos = (Integer) v.getTag();
                Product m =(Product) productList.get(pos);
                if (paused) {
                m.setPlayPauseId(R.drawable.ic_pause);
                paused=false;
                }else {
                 m.setPlayPauseId(R.drawable.ic_play);
                 paused = true;
                }
                adapter.notifyDataSetChanged();     
        }
    });
}

我在我的适配器中这样称呼它:

holder.playPause=(ImageView)v.findViewById(R.id.playPause); 
holder.playPause.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
          if (callback != null) {
              callback.imageButtonOnClick(v, position);
          }      
    }
});

这是我的接口和构造函数,也在我的适配器中:

public interface PlayPauseClick {
    void imageButtonOnClick(View v, int position);
}
private PlayPauseClick callback;
public void setPlayPauseClickListener(PlayPauseClick listener) {
    this.callback = listener;
}

我已经在我的片段中实现了这个接口

更新

产品类别 :

public class Product implements Serializable {

@SerializedName("pid")
public int pid;
@SerializedName("name")
public String name;
@SerializedName("qty")
public int qty;
@SerializedName("price")
public String description;
@SerializedName("image_url")
public String image_url;
@SerializedName("date")
public String date;

 private int PlayPauseId;

public int getPlayPauseId() {
    return PlayPauseId;
}
public void setPlayPauseId(int playPauseId) {
    PlayPauseId = playPauseId;
 }

我认为您无需向 Fragment 发送回调用以更改播放/暂停图像然后通知。只需在适配器内更改它,例如

holder.playPause.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Product product =(Product) productList.get(pos);
        if (product.getPlayPauseId() == R.drawable.ic_play) {
            product.setPlayPauseId(R.drawable.ic_pause);
        }else {
            product.setPlayPauseId(R.drawable.ic_play);
        }
        v.setImageResource(product.getPlayPauseId());
    }
});

更新
在您的情况下,您所有的逻辑代码都在Fragment而不是Adapter所以我认为您可以这样做适配器

Product product = productList.get(position);
holder.playPause=(ImageView)v.findViewById(R.id.playPause); 
holder.playPause.setImageResource(product.getPlayPauseId());
holder.playPause.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
          if (callback != null) {
              // you need to pass the position, don't need pass the View 
              callback.imageButtonOnClick(position);
          }      
    }
});

片段代码

public void imageButtonOnClick(int position) {
     Product product = productList.get(position);
     if(your logic){
          product.setPlayPauseId(R.drawable.ic_play);
     }else{
          product.setPlayPauseId(R.drawable.ic_pause);
     } 
     adapter.notifyDataSetChanged();
} 

最新更新