2

У меня есть метод в моем фрагменте (с целью изменения изображения Listview на другое изображение после нажатия). Я вызываю этот метод в своем адаптере. Теперь, когда я нажимаю на этот Imageview, ничего не происходит. Когда я нажимаю его снова, он работает. (Это изображение является кнопкой «Воспроизведение и пауза», поэтому, когда я нажимаю на него, чтобы включить его в Play значок Я должен снова и так далее Нажмите два раза ...) ..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();  
     } 

    }); 
} 

Я называю это так в моем адаптере:

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

Я реализовал этот интерфейс в моем фрагменте

Update

Класс продукта:

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

Я думаю, вам нужно инициализировать ialize 'boolean pauseed;' –

+0

@SelimAjimi вы не видели мой метод –

+0

Можете ли вы дать код класса Product? Продукт может возвращать тот же путь для уже выбранного ресурса, если вы не сделали специальной проверки там, как предлагает @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()); 
    } 
}); 

Update
В вашем случае, вся ваша логика код в 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

У меня так много данных и условий в моем Фрагменте, что я должен проверить и передать его в моем методе в моем фрагменте. Если я установил это прямо в свой адаптер, у меня нет доступа к ним –