我已经实现OnScrollListener
了了解用户是否在列表的末尾,并且设法将新数据成功添加到列表中,如下所示:
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE) {
if (list.getLastVisiblePosition() >= list.getCount()-1) {
currentPage++;
loadMore(currentPage);
adapter.notifyDataSetChanged();
}
}
}
问题是notifyDataSetChanged
按预期刷新整个ListView。但是,由于在我的列表中,有些图像是从Internet异步加载的,因此刷新会再次加载图像,这显然是不希望的。像Facebook,Twitter等应用程序最终都无缝地附加了新数据,而完全没有这种刷新。他们是如何做到的,我又如何实现这种无缝的无尽滚动?
我认为我必须在适配器的getView
方法中做一些事情以防止重新加载,但是我还无法弄清楚。有已知的方法吗?
谢谢!
您将要实现图像缓存。应该向缓存请求图像,然后从Internet异步加载它们,或者如果以前使用过,则从内存加载它们。缓存应在中使用getView
。
进行缓存的最简单方法是拥有一个哈希图(如果在单独的线程上使图像异步,则可能是ConcurrentHashMap),其中的键是url,值是要显示的图像。然后,您可以先检查哈希图是否具有该值,否则获取图像并插入到哈希图中。如果环顾四周,还有许多其他方法可以执行此操作,但这可能是最简单的方法。
此解决方案更加可靠,因为您无需担心无效的内容,也不需要担心在请求同一图像时进行多个呼叫。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句