Ank*_*ary 14 android android-recyclerview
我正在使用RecyclerView.Adapter,但我对它的方法的工作感到困惑onCreateViewHolder.
@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, viewGroup, false);
ViewHolderFooter vh = new ViewHolderFooter(mView);
return vh;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,我的列表中有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;
}
Run Code Online (Sandbox Code Playgroud)
所以我们不创建额外的视图对象.请帮我理解利弊.
谢谢
Gil*_*yof 19
onCreateViewHolder只有在没有RecyclerView可以重复使用的现有视图持有者时才创建新的视图持有者.因此,例如,如果您一次RecyclerView可以显示5个项目,它将创建5-6 ViewHolders,然后每次调用时自动重复使用它们onBindViewHolder.
它类似于您的代码有什么ListView不(检查,如果convertView是null,如果不是,抓住现有的ViewHolder从标签),除了与RecyclerView,这是全部自动完成.
我认为这是使用a的专业人士之一RecyclerView- 你不必担心如此重复ViewHolders使用ListView.con是RecyclerView非常可定制的,但内置的功能非常少 - 不同的ListView是,它不是可定制的,但具有很多内置功能.