对每个项目调用recyclelerview的查看者

时间:2016-06-25 18:56:19

标签: android android-recyclerview android-viewholder

我的项目中有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;
    }

1 个答案:

答案 0 :(得分:4)

getItemViewType更改了onCreateViewHolder的调用次数。文档声明它

  

为了查看的目的,返回项目的视图类型   回收

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