2017-02-14 15 views
0

Есть ли способ установить onClickListener в Imageview (Listview) внутри действия? I'v создал это, и он прекрасно работает в моем адаптере, но это не работает в моей деятельности:set onClickListener on Imageview (Listview) внутри действия

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

    playPause=(ImageView)view.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 =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 class Product implements Serializable { 

private int PlayPauseId; 

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



public int getPlayPauseId() { 
    return PlayPauseId; 
} 

public void setPlayPauseId(int playPauseId) { 
    PlayPauseId = playPauseId; 
     } 

    } 

адаптер класса (библиотека Fundapter):

public class FunDapter<T> extends BaseAdapter implements Filterable { 

protected List<T> mDataItems; 
protected List<T> mOrigDataItems; 
protected LongExtractor<T> idExtractor; 
protected final Context mContext; 
private final int mLayoutResource; 
private final BindDictionary<T> mBindDictionary; 
private int oddColorRes; 
private int evenColorRes; 
private FunDapterFilter<T> funDapterFilter; 
private Filter mFilter; 



public FunDapter(Context context, List<T> dataItems, int layoutResource, 
       BindDictionary<T> dictionary) { 
    this(context, dataItems, layoutResource, null, dictionary); 
} 


public FunDapter(Context context, List<T> dataItems, int layoutResource, 
       LongExtractor<T> idExtractor, BindDictionary<T> dictionary) { 
    this.mContext = context; 
    this.mDataItems = dataItems; 
    this.mOrigDataItems = dataItems; 
    this.mLayoutResource = layoutResource; 
    this.idExtractor = idExtractor; 
    this.mBindDictionary = dictionary; 

} 


public void updateData(List<T> dataItems) { 
    this.mDataItems = dataItems; 
    this.mOrigDataItems = dataItems; 
    notifyDataSetChanged(); 
} 

@Override 
public int getCount() { 
    if (mDataItems == null || mBindDictionary == null) return 0; 

    return mDataItems.size(); 
} 

@Override 
public T getItem(int position) { 
    return mDataItems.get(position); 
} 

@Override 
public boolean hasStableIds() { 
    if(idExtractor == null) return super.hasStableIds(); 
    else return true; 
} 

@Override 
public long getItemId(int position) { 
    if(idExtractor == null) return position; 
    else return idExtractor.getLongValue(getItem(position), position); 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 


    View v = convertView; 
    final GenericViewHolder holder; 
    if (null == v) { 
     LayoutInflater vi = 
       (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(mLayoutResource, null); 
     holder = new GenericViewHolder(); 
     holder.root = v; 





     FunDapterUtils.initViews(v, holder, mBindDictionary); 

     v.setTag(holder); 


    } else { 
     holder = (GenericViewHolder) v.getTag(); 
    } 



    final T item = getItem(position); 
    showData(item, holder, position); 




    return v; 
} 
+1

вы можете установить его в методе GetView вашего класса адаптера. выше, не будет работать так, как вы нажимаете, щелкнув элемент списка. –

+0

Я думаю, удалить onItemClick и прямо установить clickviewview в onBindViewHolder в адаптер –

+0

@JunaidHafeez Я знал, что это может не сработать .. но я настаиваю, чтобы сделать это в своей деятельности – DastakWall

ответ

0

вы можете сделать это с двумя способами: сделать интерфейс что-то вроде этого

public interface ImageClick { 
    public imageButtonOnClick(View view, int position) 
} 

реализуют его в вашей деятельности, и в вашей адаптер getView, установите imageOnClickListener и вызовите этот метод интерфейса внутри этого onClick, передайте свое положение и просмотрите его, чтобы вы могли использовать позицию и т. д. в своем обратный вызов активности.

Во-вторых, это просто сделать метод в своей деятельности, как в интерфейсе

public imageButtonOnClick(View view, int position) 

в вашем адаптере метод OnClick на ImageView, называют это что-то вроде

((YourActivity)context).imageButtonOnClick(params1, param2); 
+0

Кажется, ваше решение будет работать, так как я новичок в андроиде, можете ли вы любезно объяснить свой путь «один» с примером!?, я отвечу на ваш ответ – DastakWall

+0

, пожалуйста, напишите свой код адаптера. –

+0

done ........... – DastakWall

0

Для получения нажмите на изображение в список в самой деятельности, которую вы должны обработать

Создать интерфейс

public interface OnButtonClickListener { 
public void onButtonClick(int position,View view); 

} 

в классе actvity реализации OnButtonClickListener

вы получите интерфейс methood

@Override 
public void onButtonClick(final int position, View view) { 
    int id = view.getId(); 
    switch (id) { 
     case R.id.YOURIMAGEVIEWID: 
     //implent your process... 
    } 
} 

Создать конструктор в адаптер Calss

Context context; 
OnButtonClickListener callback 
public AdapterClass(Context context OnButtonClickListener buttonClickListener) { 
    this.context = context; 
    callback = buttonClickListener; 
} 

изображения нажмите в классе адаптера

holder.imageView..setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      callback.onButtonClick(position, v); 
     } 
    }); 

в вашем actvity классе

AdapterClass Adapter = new AdapterClass(youractivity.this, youractivity.this); 

Добавить этот класс для функции обратного вызова

public class ListCustomClickEvents implements OnClickListener,View.OnTouchListener { 
private int position; 
private OnCustomClickListener callback; 


// Pass in the callback (this'll be the activity) and the row position 
public ListCustomClickEvents(OnCustomClickListener callback, int pos) { 
    position = pos; 
    this.callback = callback; 
} 

@Override 
public void onClick(View v) { 
    callback.OnCustomClick(v, position); 
} 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^