gpt4 book ai didi

android - 每个项目都会调用 recyclerview 的查看器

转载 作者:搜寻专家 更新时间:2023-11-01 07:49:04 25 4
gpt4 key购买 nike

我的项目中有 Recyclerview,它有一个 ViewHolder。对于这个 RecyclerView,我有很多项目要填充,但为了简单起见,我添加了 100 个项目。但是对于这 100 个项目,onCreateViewHolder 被称为 100 个项目,即对于它被调用的每个项目,因此每个项目的 View 都被破坏了。如果我将使用所有项目(可能是 1000 或 2000),我就会 OOM。那么我怎样才能避免为每个项目调用 onCreateViewHolder 。真的需要帮助!!

public static final int HEADER = Integer.MIN_VALUE;
public static final int FOOTER = Integer.MIN_VALUE + 1;
public static final int ADAPTER_OFFSET = 2;

@Override
public int getItemViewType(int position) {
if (position == 0 && useHeader()) {
return HEADER;
}

if (useHeader() && position > getBasicItemCount() && useFooter())
return FOOTER;
else if (!useHeader() && position >= getBasicItemCount() && useFooter())
return FOOTER;

int basicItemType = getBasicItemType(position - (useHeader() ? 1 : 0));

if (basicItemType >= Integer.MAX_VALUE - ADAPTER_OFFSET) {
new IllegalStateException(
"");
}

return basicItemType + ADAPTER_OFFSET;
}

@Override
public int getBasicItemType(int position) {
return position;
}

最佳答案

getItemViewType 更改调用 onCreateViewHolder 的次数。文档指出它

Return the view type of the item at position for the purposes of view recycling.

这意味着每次 getItemViewType 返回一个不同的值时,Android 认为您正在处理一个新的不同类型,并且您想要一个不同的 View 。您的实现正在返回 position。这意味着getItemCount不同的 View

关于android - 每个项目都会调用 recyclerview 的查看器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031910/

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