Android Recycler查看水平滚动到最后一项并显示第一项

时间:2017-10-12 08:49:05

标签: java android android-recyclerview kotlin

目前我正在处理具有水平滚动的回收器视图。

我有一个包含这些值的列表:

  

{ “2001”, “2002”, “2003”, “2004”, “2005”, “2006”, “2007”, “2008”, “2009”, “2010”,...}

等等,直到2017年

我的目标是在中心

上选择年份

一切正常,但我有两个问题:

  1. 我无法滚动到右边缘,就像recyclerview对滚动有限制一样。假设最后4项是"2014", "2015", "2016", "2017"。我只能滚动到“2003”。现在我通过在列表之前和之后添加虚拟年份来解决此问题。 (非常hackish,但不是那么坚固)

  2. 我想在滚动到达结尾时显示第一个孩子。例如,当我能够滚动到结束 2017 时,我想在 2017 旁边显示列表的第一项,在这种情况下是 “2001”即可。例如:2013 | 2014 | 2015年| 2016 | 2017年| 2001 | ...

3 个答案:

答案 0 :(得分:0)

你应该在这里使用循环你的recyclerview

您的适配器中的

覆盖getItemCount()以返回类似Integer.MAX_VALUE的内容:

@Override
public int getItemCount() {
    return Integer.MAX_VALUE;
}

在onBindViewHolder()模数除以(%)位置按实际项目编号:

 @Override
   public void onBindViewHolder(MyViewHolder holder, int position) {
        int positionInList = position % dataList.size();
        Item item = dataList.get(positionInList);
        //...
    }

最后,将当前项目设置为中间的某个项目(否则,只有向下方向才会是无穷无尽的。)

// scroll to middle item
recyclerView.getLayoutManager().scrollToPosition(Integer.MAX_VALUE / 2);

答案 1 :(得分:0)

根据上面的回复,您无法将recyclelerview滚动为圆圈,从最后一个项目到第一个项目。因此,您必须准确计算元素的数量并覆盖回收视图的ontouch拦截,以达到您想要的效果。

答案 2 :(得分:0)

试试这个,

recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
recyclerView.getLayoutManager().scrollToPosition(5);

你可以把你的物品编号放在5的位置,可以做(list.size() - 3)特定年份。