每个项目都会调用 recyclerview 的查看器
Viewholder of recyclerview getting called for each item
我的项目中有 Recyclerview,它有一个 ViewHolder。对于这个 RecyclerView,我有很多项目要填充,但为了简单起见,我添加了 100 个项目。但是对于这 100 个项目,onCreateViewHolder 被称为 100 个项目,即对于它被调用的每个项目,因此每个项目的视图都被破坏了。如果我将使用所有项目(可能是 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
return一个不同的值,Android就认为你在处理一个新的不同类型,你想要对它有不同的看法。您的实施是 returning position
。这意味着getItemCount
不同的观点
我的项目中有 Recyclerview,它有一个 ViewHolder。对于这个 RecyclerView,我有很多项目要填充,但为了简单起见,我添加了 100 个项目。但是对于这 100 个项目,onCreateViewHolder 被称为 100 个项目,即对于它被调用的每个项目,因此每个项目的视图都被破坏了。如果我将使用所有项目(可能是 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
return一个不同的值,Android就认为你在处理一个新的不同类型,你想要对它有不同的看法。您的实施是 returning position
。这意味着getItemCount
不同的观点