ImageView在两次点击后更改图像
问题描述:
我在我的Fragment中有一个方法(目的是在单击后将Listview图像更改为另一个图像)。我在我的适配器中调用此方法..现在,当我单击Imageview时没有任何反应..当我再次单击它时它工作..(此Imageview是播放和暂停按钮,所以当我单击它时将其变为播放图标我得再等等点击两次......)ImageView在两次点击后更改图像
这是我在我的片段方法:
@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();
}
});
}
我这样调用它在我的适配器:
这是我的接口和构造函数,它也在我的适配器中:
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;
}
答
我觉得你并不需要发送一个回呼以片段更改播放/暂停图像然后通知。简单改一下你的适配器里面像
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();
}
+0
我有我的片段中有这么多的数据和条件,我必须检查并在我的片段中将其传递给我的方法..如果我直接在我的适配器中设置它,我无法访问它们 –
我想你需要init ialize'boolean paused;' –
@SelimAjimi你没有看到我的方法 –
你可以给类产品的代码?如果您没有在@SelimAjimi建议的地方进行特殊检查,那么产品可能会为已选资源返回相同的路径。 – rencsaridogan