2

私は自分の断片に(クリック後に別の画像にListview画像を変更する目的で)メソッドを持っています。私はこのメソッドを私のアダプタで呼びます..今、私はそのImageviewをクリックすると何も起こりません..再びそれをクリックすると..(このImageviewは再生と一時停止ボタンですので、私はそうで再び2回クリックする必要があり、アイコン...)..ImageViewは2回クリックすると画像を変更します

これは私のフラグメントの私の方法です:

@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; 
} 

は、私は私の断片で、このインタフェースを実装しました

更新

Productクラス:私はあなたが戻ってコールを送信する必要はありませんだと思う

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

更新
のようなあなたのアダプタ内部の簡単な変更は、すべてあなたのロジックコードは、私はあなたがこの アダプタ

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

断片のように行うことができると思うので、ないAdapterFragmentでありますコード

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

私のフラグメントには非常に多くのデータと条件がありますので、私のフラグメント内のメソッドでそれをチェックして渡す必要があります。これを自分のアダプタで直接設定すると、 –

関連する問題