列表视图使用线程池从互联网上加载100张图片。如何仅在必要的范围内加载元素10?当滚动下载另外10个项目?我正在使用Lru缓存
答案 0 :(得分:2)
您可以使用limit
和offset
:
示例:
假设我想获取10条记录,结束后滚动将获取另外10条记录:
定义偏移量变量:
private static int offset = 0;
当你通过偏移量变量绑定适配器时:
Select * from table limit 10 offset 0
因此,在编写listview代码后,这将从0-9中仅获取10条记录:
listview.setOnScrollListener(new OnScrollListener() {
private int mLastFirstVisibleItem;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mLastFirstVisibleItem = firstVisibleItem;
final int lastItem = firstVisibleItem + visibleItemCount;
if (lastItem == totalItemCount) {
if (preLast != lastItem) {
preLast = lastItem;
offset = offset + 10;
new fetchrecords().execute();
} else {
}
}
}
});
因此,当您转到列表视图项的最后位置时,它会调用方法fetchrecords()
和您的offset value is 10
。
因此,当此方法在此时调用时,您的偏移值为10。
所以下次你的查询就像:
select * from table limit 10 offset 10
因此它会获取其他10条记录。
它完成了!!
答案 1 :(得分:0)
答案 2 :(得分:0)
只需更改数据源
加载第一次列表视图时
获取大约10个图像并将其添加到列表视图适配器的数据源中
如果检测到滚动,则获取下10张图片并清除listview adapete并再次添加新10
或者您可以一次性获取所有图像网址然后根据滚动您可以更改列表视图适配器的数据源的内容
答案 3 :(得分:0)
无需为您的问题立即调用所有数据。你必须修改api。以这样的方式创建一个Web服务,一次只显示10个数据,这可以通过从您的应用程序传递值来完成 例如。在api调用pass 1期间,服务器端应该检查从android传递的值是1还是2还是......如果值是1(比如说)使用limit发送10个数据,如果值是2则发送另外10个数据。 并且在滚动列表视图期间在android端调用api传递值并将这些从api获取的数据附加到本地列表并将其显示到列表视图中。它还节省了时间和用户数据