背景
我正在使用PinterestLikeAdapterView 库来显示来自互联网的一些图像,这就像一个 gridView 但每个单元格的高度不同。
问题
因为我使用这个库来显示来自互联网的图像,所以在调用 notifyDatasetChanged 时不会导致视图混乱是至关重要的。
出于某种原因,调用此函数将调用 getView() 方法,并为视图提供不同的位置。例如,即使我根本没有滚动,并调用 notifyDatasetChanged(或 addAll,如果它是一个 ArrayAdapter),对于位置 0,它将采用位置 8 的视图,对于位置 1,它将采用位置视图7,以此类推……
这使得整个网格刷新它的图像,因此它破坏了用户体验。
通常,在gridView和listView中,克服刷新的方法是将视图使用的位置放在viewHolder中,如果相等,则表示它们仍然匹配。
例如:
... getView(...)
{
//<=inflate a new view if needed
//avoid refreshing view in case it's still the same position:
if(position==holder.position)
return rootView;
holder.position=position;
//<=update the view according to its data
...
}
但是,在这里他们以不同的顺序重用其他视图,所以这个技巧在这里不起作用。
由于这个问题,我不仅刷新了几乎所有可见视图,而且由于我使用DiskCacheLru 库,它会崩溃,因为它尝试使用 2 个线程将 2 个相同的 inputSteam 数据放入同一个键中。
问题
我能做些什么?这是库中的已知错误吗?
也许我正在使用一种不好的方法来克服刷新?
现在,我使用内存缓存来至少获取以前缓存的项目,但这更像是“治愈”而不是“疫苗”......