我正在使用RecyclerView.Adapter,但我对在CreateViewHolder上的方法工作感到困惑.
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup,int viewType) { if(viewType==TYPE_ITEM) { View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item,viewGroup,false); ViewHolder vh = new ViewHolder(mView); return vh; } else { View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_uncommon_item,false); ViewHolderFooter vh = new ViewHolderFooter(mView); return vh; } }
所以我在我的列表中有10个项目,所以每个项目这个方法将被调用,并且每当一个新的ViewHolder将被创建当然,它将有一次为每个视图,但现在我的问题是当我们使用ListView和BaseAdapter与我们将ViewHolder存储在标签中并使用它.我们不会为每个项目创建ViewHolder.
@Override public View getView(int position,View convertView,ViewGroup parent) { MyViewHolder mViewHolder; if(convertView == null) { convertView = inflater.inflate(R.layout.layout_list_item,null); mViewHolder = new MyViewHolder(); convertView.setTag(mViewHolder); } else { mViewHolder = (MyViewHolder) convertView.getTag(); } mViewHolder.tvTitle = detail(convertView,R.id.tvTitle,myList.get(position).getTitle()); mViewHolder.tvDesc = detail(convertView,R.id.tvDesc,myList.get(position).getDescription()); mViewHolder.ivIcon = detail(convertView,R.id.ivIcon,myList.get(position).getImgResId()); return convertView; }
所以我们不会创建额外的观看者对象.请帮我理解利弊.
谢谢
解决方法
当没有RecyclerView可以重用的现有视图持有者时,onCreateViewHolder仅创建一个新的视图持有者.所以,例如,如果您的RecyclerView可以一次显示5个项目,它将创建5-6个ViewHolders,然后自动重新使用它们,每次调用onBindViewHolder.
它类似于ListView中的代码(检查convertView是否为null,如果没有,请从标签中抓取现有的ViewHolder),但使用RecyclerView,这一切都将自动完成.
我想这是使用RecyclerView的专业人士之一 – 您不必担心像ViewView那样重用ViewHolders. con Rec RecyclerView是非常可定制的,但内置功能很少 – 与ListView不同,它不是很可定制的,但内置了很多功能.