在列表视图中向下滚动时如何加载更多项目?

时间:2018-09-07 20:11:20

标签: java php android listview

首先我想说:这个问题不可重复!

我已经阅读了很多有关向下滚动时加载更多项目的问题

This对我最有帮助。

但是我读到的所有问题都不能解释基本原理。

所以,我的意思是:

我的应用程序从json获取数据并将其显示在ListView中,但是无法从数据库中加载一个request的所有项目。该应用程序崩溃了……

解决方案是仅加载10个项目,然后再次向下滚动10个项目。

但是执行此操作的基本原理是什么?

我考虑了这两种不同的选择:

  1. 在我的PHP文件中设置一个LIMIT,然后每10个项目向android发送一个新请求,并设置LIMIT +10。
  2. 从android发送一个请求,并从json获取所有数据,但仅显示10个项目。

代码不是必需的,因为我想知道这样做的原理。

3 个答案:

答案 0 :(得分:1)

通常,您每次都会从服务器加载10个新项目。使用页面参数来确定您需要哪些10项以及放置在何处。

一次加载所有项目可能太昂贵了:延迟可能会很长,并且用户的数据计划也不会令人满意。显然取决于有多少个物品以及它们的内容。

答案 1 :(得分:1)

您将不得不找到权衡。根据您的数据大小,有时将所有内容解析并保存到本地数据库中很有意义。

对于200-300条记录,您不想在列表中每50条记录之后再进行一次api调用。记住,使用移动应用程序时,用户经常上下滚动。您可能不必要向服务器发送多个请求,这可能会导致过载(取决于用户数量)。

如果使用选项2,则可以使用类似JobIntentService的方式来静默获取数据并保存在本地。

这种方法还可以让您的用户在没有Internet(脱机模式)的情况下进行交互。

答案 2 :(得分:1)

我在应用程序中使用的方法是:

第1步::我从服务器加载了具有限制的第一组数据,然后将最后一个记录数据ID存储在变量中。

步骤2:对您的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,请检查请求是否之前已启动,那么建议首先创建一个 boolean false ,然后在开始请求之前,在您的 GetBusinesses()函数中将其设置为 true ,一旦数据加载并完成请求,将其设置为<再次strong> false 。 希望有帮助。