每个项目都会调用 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不同的观点