在listview中向下滚动时如何加载更多项?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在listview中向下滚动时如何加载更多项?相关的知识,希望对你有一定的参考价值。

首先我想说:这个问题没有重复!

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

This对我最有帮助。

但我读到的所有问题都没有解释基本原则。

所以,我的意思是:

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

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

But what is the basic principle to do this?

我想到了这两个不同的选择:

  1. 在我的php文件中设置LIMIT,并为每个10项发送一个来自android的新请求并设置LIMIT +10。
  2. 从android发送一个请求并从json获取所有数据,但只显示10个项目。

代码没有必要,因为我想知道这样做的原则。

答案

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

步骤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中向下滚动时如何加载更多项?的主要内容,如果未能解决你的问题,请参考以下文章

在 ListView 滚动结束时加载更多结果

从服务器 json 响应延迟加载 listview 项

在Android中向上滚动ListView时加载页面

在 ListView 中,向下滚动时,在颤动中丢失数据

listitem中的Android listview imageview在滚动时隐藏

listitem中的Android listview imageview在滚动时隐藏