滚动时Recyclerview GridlayoutManager OnBindViewHolder的位置和getAdapterPosition()错误

时间:2018-10-13 14:28:26

标签: android

我正在将Recyclerview与GridLayoutManager一起使用,以查看具有不同类型和不同SpanSize的多个Viewholder:

listsLayoutManager.setSpanCount(6);
listsLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            if (adapter.getItemViewType(position) == VODsGridRVAdapter.TYPE_TITLE || adapter.getItemViewType(position) == VODsGridRVAdapter.TYPE_HEADER)
                return 6;
            return 1;
        }
    });

这是getItemViewType方法:

 @Override
public int getItemViewType(int position) {
    if (position == 0)
        return TYPE_HEADER;
    return dataList.get(position - 1).isTitle() ? TYPE_TITLE : TYPE_ITEM;
}

位置0始终是标题。

滚动视图时,onBindViewHolder会给出错误的位置,而getAdapterPosition会这样做。 除了使用holder.setIsRecyclable(false); 之外,还有什么解决方法?

1 个答案:

答案 0 :(得分:0)

经过36个小时的调试和尝试,我能够通过删除活动中的adapter.setHasStableIds(true);行来解决此问题。