gpt4 book ai didi

Android RecyclerView.Adapter onCreateViewHolder() 工作

转载 作者:可可西里 更新时间:2023-11-01 19:03:04 27 4
gpt4 key购买 nike

我正在使用 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;

}
}

如果我的列表中有 10 个项目,那么对于每个项目都会调用此方法,每次都会创建一个新的 ViewHolder 当然每个 View 都会调用一次,但现在我的问题是当我们将 ListViewBaseAdapter 与它们一起使用时,我们将 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;
}

那么我们不是在创建额外的 viewholders 对象吗?请帮助我了解利弊。

谢谢

最佳答案

onCreateViewHolder 仅在没有 RecyclerView 可以重用的现有 View 持有者时创建新的 View 持有者。因此,例如,如果您的 RecyclerView 可以一次显示 5 个项目,它将创建 5-6 个 ViewHolders,然后自动重用它们,每次调用 onBindViewHolder

它类似于您在 ListView 中的代码所做的(检查 convertView 是否为 null,如果不是,则获取现有的 ViewHolder 来自标签),除了 RecyclerView,这一切都是自动完成的。

我想这是使用 RecyclerView 的优点之一 - 您不必像使用 ListView 那样担心重用 ViewHolders 。缺点是,RecyclerView 非常可定制,但内置功能很少——不像 ListView 不是很可定制,但有很多内置功能。

关于Android RecyclerView.Adapter onCreateViewHolder() 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30615400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com