2

我在我的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; 
} 
+0

我想你需要init ialize'boolean paused;' –

+0

@SelimAjimi你没有看到我的方法 –

+0

你可以给类产品的代码?如果您没有在@SelimAjimi建议的地方进行特殊检查,那么产品可能会为已选资源返回相同的路径。 – rencsaridogan

回答

4

我觉得你并不需要发送一个回呼以片段更改播放/暂停图像然后通知。简单改一下你的适配器里面像

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()); 
    } 
}); 

更新
在你的情况,你的所有的逻辑代码是FragmentAdapter所以我觉得你可以像这样 适配器

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

我有我的片段中有这么多的数据和条件,我必须检查并在我的片段中将其传递给我的方法..如果我直接在我的适配器中设置它,我无法访问它们 –