我已经实现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。但由于在我的列表中存在从互联网异步加载的图像,因此刷新会导致图像再次加载,这显然是不希望的。像Facebook,Twitter等应用程序在最后无缝地附加新数据,而根本没有这种刷新。他们是如何做到的,我怎样才能实现这种无缝的无限滚动?
我想我必须在我的适配器的getView
方法中做一些事情以防止重新加载,但我还是想不通。有没有一种已知的方法呢?
谢谢!
答案 0 :(得分:0)
您将要实现图像缓存。应该要求缓存图像,并从Internet异步加载它们,或者如果以前使用过,则从内存加载它们。缓存应该在getView
。
执行缓存的最简单方法是使用hashmap(如果您在单独的线程上获取图像异步,则可能是ConcurrentHashMap),其中键是url,值是要显示的图像。然后,您可以检查hashmap是否具有该值,否则也将获取该图像并插入到hashmap中。如果你环顾四周,还有很多其他方法可以做到这一点,但这可能是最简单的。
此解决方案更加强大,因为您无需担心无效的内容,并且在请求同一图像时无需担心多次调用。