2015-02-24 7 views
2

При использовании android.support.v7.widget.RecyclerView.ViewHolder в нашем адаптере, требуется ли теги просмотра, как мы это делали ранее. Или библиотека делает это автоматически в конце?android.support.v7.widget.RecyclerView.ViewHolder

+0

'onBindViewHolder' будет выполнять привязку, поэтому не нужно тегировать – Xcihnegn

ответ

1

Вам не требуется view.setTag (viewHolder), просто привяжите данные в onBindViewHolder (держатель ViewHolder, позиция int). PS: Вы должны отредактировать название своего вопроса, чтобы больше описать вашу проблему.

+0

Okay Thanks. Таким образом, тегирование управляется внутренне правильно. – Vineeth

0

Вам больше не нужно отмечать View с помощью ViewHolder, если вы также расширяете RecyclerView.Adapter в своем адаптере. Адаптер RecyclerView требует, чтобы вы реализовали несколько методов, которые помогут вам создать и привязать держатель вида.

  • onCreateViewHolder(ViewGroup viewGroup, int i) в котором вы раздувать View и создать ViewHolder - конструктор RecyclerView.ViewHolder требует передачи в представлении.
  • onBindViewHolder(ViewHolder holder, int i) где вы выполняете все операции, необходимые для привязки данных к держателю
  • getItemCount() вернуть количество элементов в вашем RecyclerView

Адаптер должен выглядеть примерно так:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
    ... 
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     // TODO: inflate your view and create viewholder, most likely looks like this though 
     View v = LayoutInflater.from(viewGroup.getContext()).inflate(
      R.layout.recycler_view_item, 
      viewGroup, 
      false); 

     MyViewHolder vh = new MyViewHolder(v); 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder viewHolder, int i) { 
     // TODO: all your bind operations 
    } 

    @Override 
    public int getItemCount() { 
     // TODO: return total item count of your views 
    } 

    public static class MyViewHolder extends RecyclerView.ViewHolder { 
     // TODO: whatever views you need to bind 
     public TextView mTextView; 
     public ImageView mImageView; 

     public MyViewHolder(View v) { 
      super(v); // done this way instead of view tagging 
      mTextView = (TextView) v.findViewById(R.id.textview); 
      mImageView = (ImageView) v.findViewById(R.id.imageview); 
     } 
    } 
} 
+1

Не могу этого сделать! Вы получите сообщение об ошибке: 'viewHolder - абстрактный; невозможно создать экземпляр ' –

+2

, вы, вероятно, создаете экземпляр' RecyclerView.ViewHolder', а не пользовательский ViewHolder, объявленный во внутреннем статическом классе. Я отредактирую пример, чтобы сделать это более понятным. – ekchang

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