baseAdapter icon indicating copy to clipboard operation
baseAdapter copied to clipboard

添加HeaderView后position位置的问题

Open LolitaComplex opened this issue 9 years ago • 3 comments

使用HeaderAndFooterWraper包装后,对于ItemViewDelegate获取的postion都会有问题。位置差了HeaderView的数量。 看源码发现MultiItemTypeAdapter中

public void convert(ViewHolder holder, T t) {
        mItemViewDelegateManager.convert(holder, t, holder.getAdapterPosition());
 }

主要是这个holder.getAdapterPosition()这样获取难道不是会算上HeaderView数量?我实验证明Positon完全是错误的。这里应该使用onBindViewHolder()方法中的position才对额!!

LolitaComplex avatar Sep 20 '16 09:09 LolitaComplex

同样的问题

ab503044120 avatar Oct 12 '16 01:10 ab503044120

我自定义了一个HeadCommonAdapter 把Head数量传进来

public class HeadCommonAdapter<T> extends MultiItemTypeAdapter<T> {

private int mHeadCount;

public HeadCommonAdapter(Context context, List<T> datas) {
    super(context, datas);

}


public void setmHeadCount(int mHeadCount) {
    this.mHeadCount = mHeadCount;
}

@Override
protected void setListener(ViewGroup parent, ViewHolder viewHolder, int viewType) {
    if (!isEnabled(viewType)) return;
    viewHolder.getConvertView().setOnClickListener(v -> {
        if (mOnItemClickListener != null) {
            int position = viewHolder.getAdapterPosition();
            mOnItemClickListener.onItemClick(v, viewHolder, mDatas.get(position -
                            mHeadCount),
                    position - mHeadCount);
        }
    });

    viewHolder.getConvertView().setOnLongClickListener(v -> {
        if (mOnItemClickListener != null) {
            int position = viewHolder.getAdapterPosition();
            return mOnItemClickListener.onItemLongClick(v, viewHolder, mDatas.get
                    (position - mHeadCount), position - mHeadCount);
        }
        return false;
    });


}

}

jianchengl avatar Oct 20 '16 12:10 jianchengl

@jianchengl 大神的库代码不多,我当时练习没有引入这个包,而是自己敲了一遍。顺便把这个Position改成我想要的了

LolitaComplex avatar Oct 24 '16 13:10 LolitaComplex