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

我有我的片段中有這麼多的數據和條件,我必須檢查並在我的片段中將其傳遞給我的方法..如果我直接在我的適配器中設置它,我無法訪問它們 –