android.support.v7.widget.RecyclerView.ViewHolder

时间:2015-02-24 06:02:36

标签: android android-adapter

在我们的适配器中使用android.support.v7.widget.RecyclerView.ViewHolder时,它是否需要像我们之前那样进行视图标记。 或者图书馆是在后端自动完成的吗?

2 个答案:

答案 0 :(得分:1)

您不需要view.setTag(viewHolder),只需绑定onBindViewHolder(ViewHolder holder,int position)中的数据。 PS:你应该编辑问题的标题来描述你的问题。

答案 1 :(得分:0)

如果您还在适配器中扩展RecyclerView.Adapter,则无需再使用ViewHolder标记View。 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);
        }
    }
}