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