0

我已经实施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方法中做一些事情来防止重新加载,但我还想不通。有已知的方法吗?

谢谢!

4

1 回答 1

0

您将要实现图像缓存。应该向缓存请求图像,然后从 Internet 异步加载它们,或者如果以前使用过,则从内存中加载它们。缓存应该用在getView.

进行缓存的最简单方法是使用 hashmap(如果您在单独的线程上异步获取图像,则可能是 ConcurrentHashMap),其中键是 url,值是您要显示的图像。然后,您可以先检查哈希图是否具有该值,否则获取图像并插入哈希图中。如果您环顾四周,还有许多其他方法可以做到这一点,但这可能是最简单的。

此解决方案更强大,因为您无需担心要使哪些内容无效,并且您无需担心在请求同一图像时会进行多次调用。

于 2013-09-16T13:40:33.583 回答