baseAdapter
baseAdapter copied to clipboard
添加HeaderView后position位置的问题
使用HeaderAndFooterWraper包装后,对于ItemViewDelegate获取的postion都会有问题。位置差了HeaderView的数量。 看源码发现MultiItemTypeAdapter中
public void convert(ViewHolder holder, T t) {
mItemViewDelegateManager.convert(holder, t, holder.getAdapterPosition());
}
主要是这个holder.getAdapterPosition()这样获取难道不是会算上HeaderView数量?我实验证明Positon完全是错误的。这里应该使用onBindViewHolder()方法中的position才对额!!
同样的问题
我自定义了一个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 大神的库代码不多,我当时练习没有引入这个包,而是自己敲了一遍。顺便把这个Position改成我想要的了