2017-12-19 15 views
0

私はビューホルダーパターンについて質問があります。私は、ビューホルダーとリサイクルのビューを持っている、とGoogleから誰かがベストプラクティスは、このようにそれを実装するためにしていることを言った:あなたは[OnBind]の方法を見ればRecyclerView、happy VewHolder pattern

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

private List<ListItem> listItems; 
private Context context; 

public MyAdapter(List<ListItem> listItems, Context context) { 
    this.listItems = listItems; 
    this.context = context; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.list_item, parent, false); 
    final ViewHolder viewHolder = new ViewHolder(v); 

    return viewHolder; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.bindTo(listItems.get(position), context); 
} 

@Override 
public int getItemCount() { 
    return listItems.size(); 
} 

public static class ViewHolder extends RecyclerView.ViewHolder { 

    private TextView txtHead; 
    private TextView txtDesc; 
    private ImageView imageView; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     txtHead = (TextView) itemView.findViewById(R.id.txtHead); 
     txtDesc = (TextView) itemView.findViewById(R.id.txtDescription); 
     imageView = (ImageView) itemView.findViewById(R.id.imageView); 
    } 

    public void bindTo(ListItem item, Context context){ 
     txtHead.setText(item.getHead()); 
     txtDesc.setText(item.getDesc()); 
     Picasso.with(context) 
       .load(item.getImageUrl()) 
       .into(imageView); 
    } 
} 
} 

、それが表示Holderクラスのメソッドを呼び出します。これは、GoogleのRecyclerViewチームの誰かからの指示で実装されました。 私の質問はなぜこれが優れているかです。

答えて

0

これは本当に好みの問題です。これは、基本的に、ViewHolderのデータをバインドする責任をViewHolder自体に委譲します。

複数のビュー・ホルダー・クラスを持つ複数のビュー・タイプを使用する場合は、多態性を使用して、実際のビュー所有者の具体的なタイプを知らなくても同じメソッドを呼び出してデータをバインドできます。

ViewHoldersを静的内部クラスではなく独自のクラスとして移動する場合でも、アダプタは小さくてかわいいでしょう。

+0

なので基本的にパフォーマンスは賢明ですが何もしません。 –

+0

パフォーマンス向上のためにビューホルダーのパターンは非常に重要ですが、アダプターまたはビューホルダーにバインディングコードを設定するだけで、コードを整理するだけです – elmorabea