2015-03-06 4 views
3

Пока я смотрел несколько уроков о просмотре recycler. Некоторые из них использовали конструктор viewHolder для подключения слушателя onClick, в то время как некоторые из них использовали метод onBindViewHolder. какой метод является лучшим местом для присоединения onclicklistener. я действительно смущенЛучшее место для прикрепления onClickListener в recyclerview

ответ

6

Метод onBindViewHolder вызывается каждый раз, когда вы связываете свое представление с данными. Таким образом, нет лучшего места для установки функции прослушивания кликов. Вам не нужно устанавливать OnClickListener много раз за один View. Поэтому лучшим решением является установка функции прослушивания в onCreateViewHolder. Но важно то, как вы реализуете функцию прослушивания кликов. Если вы, например, хотите получить некоторую модель из списка, вы можете использовать метод getPosition() от ViewHolder.

Посмотрите на exmaple

@Override 
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 

    final View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.view_magazine_list_item, null); 

    final ViewHolder result = new ViewHolder(view); 
    view.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
      YourObject yourobject = yourObjectsList.get(result.getAdapterPosition())); 
      } 
    }); 
    return result; 
} 
+1

'GetPosition()' в настоящее время не рекомендуется. –

+0

@BaselShishani Спасибо –

1

В ViewHolder это лучшее место:

public static class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

    //views declare here 

    public ItemViewHolder(View convertView) 
    { 
     super(convertView); 

     ... ... 

     convertView.setOnClickListener(this); 
    } 



    @Override 
    public void onClick(View v) 
    { 
     //do something to view here 
      //also you can get view position by 'getPosition()' here  

    } 


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