在listview中向下滚动时如何加载更多项?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在listview中向下滚动时如何加载更多项?相关的知识,希望对你有一定的参考价值。
首先我想说:这个问题没有重复!
我已经阅读了很多关于在向下滚动时加载更多项目的问题。
This对我最有帮助。
但我读到的所有问题都没有解释基本原则。
所以,我的意思是:
我的应用程序从json获取数据并将其显示在ListView
中,但是无法使用一个request
加载数据库中的所有项目。该应用程序崩溃了......
解决方案是仅加载10个项目并再次向下滚动10个项目。
But what is the basic principle to do this?
我想到了这两个不同的选择:
代码没有必要,因为我想知道这样做的原则。
我在我的应用中使用的方法是:
步骤1:我从服务器加载第一组数据,然后将最后一个记录数据id存储在一个变量中。
步骤2:将on scroll结束监听器实现到listView或RecyclerView。
步骤#3:在滚动结束侦听器内部启动另一个请求并加载新记录。(这里我再次在变量中设置数据id)
例如:
在活动开始时启动请求并执行我之前解释的操作。
GetBusinesses("&isOpen=2&cat="+Prefrences.getSelectedCategoryId());
然后在你的Scroll End Listener中
GetBusinesses("&isOpen=2&cat="+Prefrences.getSelectedCategoryId()+"&limit=10&lastDataId="+BusinessItems[index].mBusinessId)
编辑为了避免在GetBusinesses()内部重复api调用,检查请求是否先前已启动,想法是创建一个布尔最初为false,然后在GetBusinesses()函数中使其成为真,然后启动请求并加载数据并请求完成再次使其变为虚假。我希望这有帮助。
通常,您每次都会从服务器加载10个新项目。使用page-parameter识别您需要的10个项目以及放置它们的位置。
一次加载所有项目可能过于昂贵:延迟可能很长,用户的数据计划也不会很开心。显然取决于有多少项目和他们有什么内容。
你必须找到权衡。根据您的数据大小,有时将解析并将其全部保存在本地数据库中是有意义的。
仅为200-300条记录,您不希望在列表中的每50条记录之后再进行一次api调用。请记住,移动应用用户经常上下滚动。您可能不必要地向服务器发送多个请求,这可能是一个过载(取决于用户数)。
如果你使用选项2,你可以使用像JobIntentService
这样的东西来静默获取数据并在本地保存。
这种方法还可以让您的用户在没有互联网(离线模式)的情况下进行交互。
以上是关于在listview中向下滚动时如何加载更多项?的主要内容,如果未能解决你的问题,请参考以下文章