RecyclerView,快乐的ViewHolder模式

问题描述 投票:0回答:1

我有一个关于视图持有者模式的问题。我有一个带有View Holder的回收者视图,Google的某个人说最好的做法是像这样实现它:

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

如果查看onBind方法,它会调用View Holder类中的方法。这是通过Google的RecyclerView团队中的某些人的指示实施的。我的问题是为什么这样更好。

android android-recyclerview android-viewholder
1个回答
1
投票

这真的是一个偏好问题。它基本上将ViewHolder的绑定数据的责任委托给ViewHolder本身。

如果您有多个视图类型,具有多个视图持有者类,那么您可以使用多态来调用相同的方法来绑定数据,而无需知道实际视图持有者的具体类型。

如果您甚至将ViewHolders作为自己的类(而不是静态内部类)移动,那么您的适配器将会很小而且很漂亮。

© www.soinside.com 2019 - 2024. All rights reserved.