如何通过在android listView中滚动来分页

时间:2014-06-29 04:41:49

标签: java android listview android-listview

我有一个带适配器的listView。

我想从服务器获取项目,然后将图像加载到每个项目。

服务器可以返回数十个项目,所以我通过10页的页面向客户询问。

我不希望用户选择页面或" next \ back"

只需在需要时添加更多项目。

我原本想过使用本地收藏品并将其填入下十个项目。

我的指标位于Adapter :: getView,其中position == 8。

问题是从服务器响应中填充本地集合的函数是在适配器之外。

如何调用此方法然后刷新适配器或使其无效?

你会采用不同的方法吗?

因为我加载图像我需要压缩它们所以我不能使用和现成的无限列表存储在git上。

2 个答案:

答案 0 :(得分:0)

每当您想要向listView添加更多项目时:

  1. 将数据项添加到Collection,用于创建适配器,通常是ArrayList。
  2. 在添加所有项目后调用adapter.notifyDataSetChanged()

答案 1 :(得分:0)

功能就在哪里,你只需要几步就可以了。

1-在适配器中定义页码。

 int pageNumber;

 // getter and setter 

2-在getView中定义一个方法:

if (position == list.size()-2 && list.size() < totalRecord)  // this make 8 , 18 , ...
    getMoreData();

总记录是您在服务器端的所有记录

然后在getMore函数中调用Parent方法:

如果在活动中:

  ((ActivityName)context).functionName();

如果在片段类中,一种方法是将Fragment类传递给适配器,然后调用:

 fragment.functionName();

然后在函数on activity中只增加pageNumber的值(adapter.setPageNumber(++ adapter.getPageNumber())并将数据添加到列表然后调用adapter.notifyDatasetChanged();

并且最后一步,因为它可能会getMoreData();调用更多,一旦你可以添加一个布尔值来检查那个调用是否跟随:

if (position == list.size()-2 && list.size() < totalRecord && isCanLoad())
getMoreData()中的

将其更改为false,并在从activity / fragment类获取所有数据后再将其更改为true