【发布时间】:2011-09-13 06:32:21
【问题描述】:
我正在开发一个应用程序,我需要在列表中显示大量数据,比如 100 个项目。我正在考虑像 facebook 应用程序那样实现它,一旦用户向下滚动到列表底部,就会逐步加载所有数据。 谁可以帮我这个事? 另外,如果这不起作用,你能提出一些实施这个的想法吗?我想到的一件事是将“加载更多”选项放在菜单中,然后反复调用更多数据。
谢谢!
【问题讨论】:
我正在开发一个应用程序,我需要在列表中显示大量数据,比如 100 个项目。我正在考虑像 facebook 应用程序那样实现它,一旦用户向下滚动到列表底部,就会逐步加载所有数据。 谁可以帮我这个事? 另外,如果这不起作用,你能提出一些实施这个的想法吗?我想到的一件事是将“加载更多”选项放在菜单中,然后反复调用更多数据。
谢谢!
【问题讨论】:
您可以使用 LazyLoading 概念或 AsyncTask 类作为后台进程概念。
这里是链接
http://developer.android.com/reference/android/os/AsyncTask.html
http://www.xoriant.com/blog/mobile-application-development/android-async-task.html
http://androidsnips.blogspot.com/2010/08/lazy-loading-of-images-in-list-view-in.html
【讨论】:
您应该使用onScrollListener 并根据剩余的项目数量加载更多。 IE 通过使用索引号、开始和结束调用 web 服务。
这是我使用的一个示例:在此示例中,我总是从服务器获取接下来的 15 个项目。第一个 if 情况是它在只剩下 x 个项目时开始获取新项目。 X 是屏幕上可见项目数的 2*。这取决于屏幕密度。
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if((totalItemCount-(firstVisibleItem+visibleItemCount) <= visibleItemCount*2)) {
startNumber = totalItemCount;
endNumber = startNumber+15;
if(fetchclass!=null) {
if(!fetchclass.isRunning()) {
fetchclass= new fetchNewsClass();
fetchclass.execute(startNumber,endNumber);
}
}
else {
fetchclass = new fetchNewsClass();
fetchclass.execute(startNumber,endNumber);
}
}
}
startNumber 和 endNumber 只是我用来调用 web 服务以从服务器获取正确数据的索引号。 fetchclass 是我用来获取数据的 AsyncTask。
【讨论】: