2017-08-29 73 views
1

我想创建一个无限列表,当我滚动到列表的结尾时,我的列表将显示第一个项目,第二个项目......在结尾()。如:Android中的无限列表

item[0] 
........ 
item[last] 
item[0] 
item[1] 

我想到的第一件事是我将双倍列表,以便它可以显示,如我所愿。 不幸的是,这是一个坏主意,因为我的列表的大小会越来越大,并且加载一个大列表对于性能不是很好(显然)。 你们能告诉我其他解决方案来处理这种情况吗?非常感谢你 。

+0

您是否找到了解决方案?你为什么不回应建议的变种? –

回答

1

使用RecyclerView,您可以通过几个步骤实现您想要的功能。这个想法是将适配器的项目数量设置为无穷大,并将您的第一个项目放到无穷大的中间。

在你的Adapter覆盖getItemCount()这样的方法。

@Override 
public int getItemCount() { 
    return Integer.MAX_VALUE;// Not the infinity, but I'm not sure someone will scroll about 2 million items and find out that's a cheat 
} 

然后在您使用RecyclerView类,得到LayoutManager并设置起始位置适配器itemCount的中间。

LinearLayoutManager layoutManager = getLayoutManager(); 
    int pos = (Integer.MAX_VALUE/2); //Voila, you are in the middle of infinity 
    layoutManager.scrollToPosition(pos); 
    yourAdapter.setLayoutManager(layoutManager); 

这样做你可以滚动列表中的任何方向高达约2 000 000滚动,没有容器的大小增加任何性能问题。

+0

什么是recuclerView?是RecyclerView,对吗? – Btnisme123

+0

是的,特赦!已编辑。 –

0

当用户触及页面底部时,您需要更新您的列表。 您可以跟踪滚动侦听器中页面的结尾。 一旦用户达到或达到页面底部的底部,只需将您的列表加倍或按照您的要求扩展即可。 因为我们需要在每一行中存储或显示每个项目的数据,所以需要扩展或加倍您的列表。 同样的事情发生在分页概念。清楚地知道我们不是扩展名单不必要的,我们正在延伸,当我们真正需要。

您可以访问此link无限滚动与AdapterViews和RecyclerView。

+0

“扩展或加倍你的列表是必需的”我有你的想法,但如果我滚动更多,如:我滚动到列表的末尾(列表A)它会显示新列表(列表B)的开始,如果我滚动更多,我应该删除列表A停止增长名单,这是真的吗? ) – Btnisme123

0

使用onScrollListener()和到了结束的时候,使用则为list.size()+ VisibleItems(从列表中可见的最终产品),并把它们先在阵列和更新您的适配器的数据
对不起非常简报解释!!!