Virtualview-Android
Virtualview-Android copied to clipboard
Page重用问题
在使用Page
无限循环时发现一个复用的问题:
问题描述:比如我在每个Item里放了一个Text控件和Image控件,现数据源有两个Item:第一个Item只设置了文字,第二个Item只设置了图片。当加载显示后,第一个和第二个都正常显示,但滑动到第三个时(也就是循环回来的第一个),图片和文字却同时显示了。
原因分析:跟了一下源代码发现,当滑动到第三个Item时,该Item使用的ViewHolder会复用前面的,而且复用的ViewHolder没有清空旧数据,这样导致了旧数据和新数据都显示在了一个Item的ViewHolder上,所以图片和文字都同时显示了。
解决方案:我目前的解决方案是找到PageView
的add(int pos, int index)
方法,修改成如下代码:
protected void add(int pos, int index) {
int type = mAdapter.getType(pos);
List<Adapter.ViewHolder> items = mItemCache.get(type);
if (null != items && items.size() > 0) {
items.remove(0);
}
Adapter.ViewHolder vh = mAdapter.onCreateViewHolder(type);
vh.mType = type;
vh.mPos = pos;
mAdapter.onBindViewHolder(vh, pos);
if (index < 0) {
this.addView(vh.mItemView);
} else {
this.addView(vh.mItemView, index);
}
}
但这样修改会有一个问题:我每次都重新创建ViewHolder,并不会复用了,这样有一定的性能问题,希望官方合理地解决这个bug。