具有无限滚动的ListView:如何防止刷新可见行?

ecem

我已经实现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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否可以创建具有无限无限滚动的网页?

如何在一个元素具有无限宽度的行中排列元素?

从数组中删除具有无限值的行

具有无限行的CSS网格垂直列

如何启动具有无限内存的JVM?

HashTable具有无限深度。为什么?如何避免?

容器内的HTML 3 div,只有中间div具有无限滚动

滞后滚动问题:Viewpager具有无限数量的片段

具有无限滚动下拉菜单的<Select>小部件

如何在没有动画的情况下滚动行可见

具有无限参数的Java方法

具有无限参数的 UDF

具有无限/动态成员的枚举

具有无限参数的类 scala

Flutter-具有无限高度错误的水平ListView

矩阵值的总和,有条件的,具有无限行和列

如何通过滚动使可见的SVG内容可见?

如何使溢流对于具有设定高度的部分可见?

如何通过Javascript中的任意属性制作具有无限深度的对象?

如何构建具有无限循环的函数的后支配树?

考虑到其父级具有无限的高度,如何获取视图高度?

如何在Ruby on Rails中使用回形针制作具有无限图像的模型?

如何使用猫鼬填充具有无限嵌套级别的文档

如何在 express.js 中处理具有无限可能性的路由?

如何在finally块中停止具有无限循环的线程

具有无限多个(未命名)参数的函数 - 如何正确访问这些参数?

如何使用 sympy 找到具有无限解的方程组的特定解?

UITableVIew行仅在滚动时可见

拖动具有滚动条的容器时,可拖动项目不可见