我的项目中有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;
}
答案 0 :(得分:4)
getItemViewType
更改了onCreateViewHolder
的调用次数。文档声明它
为了查看的目的,返回项目的视图类型 回收
这意味着每次getItemViewType
返回不同的值时,Android都会认为您正在处理新的不同类型,并且您需要一个不同的视图。您的实现正在返回position
。这意味着getItemCount
不同的观点