【问题标题】:How to limit list items display in ListView by 10 and next 10after clicking next button单击下一个按钮后如何将列表项在 ListView 中显示限制为 10 和下一个 10
【发布时间】:2013-01-29 22:49:46
【问题描述】:

我有一个包含 100 个项目的列表视图,我想显示前 10 个项目,单击下一个按钮我必须显示下一个 10,即从 11 到 20,我有获取前 10 个项目的代码

public int getCount() {
        return 10;
    }

但是如何单独获得接下来的 10 个项目等等。 任何想法

【问题讨论】:

标签: android android-listview android-button


【解决方案1】:

一种方法是,

1) 不要用所有数据填充 ArrayList。而是将它们保存在单独的 ArrayList (al1) 中,并使用最多 10 个值的 ArrayList (al2) 与 BaseAdapter 一起使用。

2) 最初,

  • al2 = al1[0] 到 al1[9]
  • BaseAdatper(上下文,数据)

3) 保持 BaseAdapter 不变,但要改变

 @Override
 public int getCount() {
 return 10;
}

 @Override
 public int getCount() {
 return data.size();
}

这不是必须的,但这是一种很好的做法。现在您将只显示 10 个项目,因为这就是您传递给适配器的所有项目。还要在扩展的 BaseAdatper 类中编写一个公共函数来设置 data 变量。

4) 在下一个按钮单击事件中,从 al1 获取接下来的 10 个项目并分配给 al2。使用您编写的公共函数将data 改写为al2

5)BaseAdapter has a method called notifyDataSetChanged ,给它打电话。这样做是告诉适配器从上到下刷新。由于您在刷新时使用新数据覆盖了data,因此您将看到新数据。就是这样。

我认为您想出一种方法来跟踪您当前正在显示的al1 中的哪个索引并不难。 :)

【讨论】:

  • 如何让 al2 = al1[0] 到 al1[9] 因为我使用的是这样的产品数组列表,即 ArrayList array_sort
  • 我不确定你在问什么。您是在问如何从 - 获取值到索引或如何跟踪您应该从 al1 获取数据的下一个索引?
  • // class level variable currIndex = 0; onNextButtonClick() { for(var i = currIndex; i < 10; i++) { // have a condition to check al1.get(i) is not going out of bounds al2.add(al1.get(i)); currIndex++; } }
  • 感谢逻辑是正确的,但由于我使用 ArrayList 我遇到了一些错误
  • @JanithaR 你能给我一些上述过程的例子吗?我也面临同样的问题。
【解决方案2】:

如果您有 100 个项目,则只需为您的适配器获取前 10 个项目,当用户按下下一步时,获取下一个 10,依此类推。

编辑:根据要求提供代码,我可以提供一个关于如何进行分页的简单示例。

int totalItems = 100;
int currentPage = 0;
int pageSize = 10;
int numPages = (int) Math.ceil((float) totalItems/pageSize);

ArrayList<String> items = new ArrayList<String>(totalItems);

List<String> page = items.subList(currentPage, pageSize);

查看上面的示例,给定项目数和所需的页面大小,您可以计算需要显示多少页,然后您可以从 ArrayList 中选择一个子列表。每次用户按下 next 时,增加 currentPage 并使用新的子列表刷新适配器。

【讨论】:

  • 好的,但是您需要先发布您拥有的代码,您是使用数组列表还是其他东西作为数据源?
  • 我正在使用 arraylist 来存储数据并使用扩展 BaseAdapter 的适配器类来显示和 slao
  • 如果在 for (int i = 0; i splitData = arrayDetail.subList(currentPage, pageSize); myModel.add(splitData); }
猜你喜欢
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 2022-07-25
  • 1970-01-01
  • 2017-08-21
  • 1970-01-01
相关资源
最近更新 更多