我有一个包含100个项目的列表视图,我想显示前10个项目,点击下一个按钮我必须显示下一个10即。从11到20,我有获得前10项的代码
public int getCount() {
return 10;
}
但如何单独获得下一个10项等等。 任何想法
答案 0 :(得分:8)
一种方法是,
1)不要用所有数据填充ArrayList。而是将它们保存在单独的ArrayList(al1
)中,并使用最多10个值的ArrayList(al2
)与BaseAdapter一起使用。
2)最初,
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
中哪个索引。 :)
答案 1 :(得分:3)
如果您有100个项目,那么只需为您的适配器选择前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并使用新的子列表刷新适配器。