【问题标题】:How can I load more items when scrolling down in listview?在列表视图中向下滚动时如何加载更多项目?
【发布时间】:2018-09-07 20:11:20
【问题描述】:

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

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

This 对我最有帮助。

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

所以,我的意思是:

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

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

但是这样做的基本原则是什么?

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

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

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

【问题讨论】:

  • 虽然这可能不是最好的解决方案,但第一个选项似乎更现实,因为您的数据可能会变得越来越大,并且加载如此大量数据的单个请求会给坏用户经验。相反,您可以做的是一次分批获取数据,例如 50 个,当您到达底部时,再次请求在列表中加载更多 50 个项目。
  • 如果您在 RecyclerView 中执行此操作,您可以使用 Android 架构中定义的分页库。

标签: java php android listview


【解决方案1】:

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

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

第 2 步:为您的 listView 或 RecyclerView 实现滚动结束监听器。

第 3 步:在滚动结束监听器内启动另一个请求并加载新记录。(这里我再次在变量中设置数据 id)

例如:

在活动开始时启动请求并执行我之前解释的操作。

GetBusinesses("&isOpen=2&cat="+Prefrences.getSelectedCategoryId());

然后在你的滚动结束监听器中

GetBusinesses("&isOpen=2&cat="+Prefrences.getSelectedCategoryId()+"&limit=10&lastDataId="+BusinessItems[index].mBusinessId)

Edit 为了避免在 GetBusinesses() 中重复调用 api,请检查请求是否以前启动过,这个想法最初是创建一个 boolean false 然后在您的 GetBusinesses() 函数中使其 true 在开始请求之前,一旦加载数据并完成请求,请使其 假。 我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    通常您每次会从服务器加载 10 个新项目。使用页面参数来确定您需要哪 10 个项目以及放置它们的位置。

    一次加载所有项目可能过于昂贵:延迟可能很长,用户的数据计划也不会满意。显然取决于有多少项目以及它们有什么内容。

    【讨论】:

      【解决方案3】:

      您必须找到权衡取舍。根据您的数据大小,有时将其全部解析并保存在本地数据库中是有意义的。

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

      如果您选择选项 2,则可以使用 JobIntentService 之类的东西静默获取数据并保存在本地。

      这种方法还可以让您的用户在没有互联网(离线模式)的情况下进行交互。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-30
        • 2020-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多