Android - ListView smoothScrollToPositionFromTop(pos,0)不适用于短列表,循环或循环listView不工作

时间:2014-12-08 14:29:59

标签: android listview android-listview

对长期看似脱节的头衔道歉。

我有一个listView,每当用户点击任何项目时,我选择的项目会自动滚动到顶部位置。到目前为止,我已经尝试了smoothScrollToPositionFromTop(pos, 0),它确实有效。但是,它仅在listView项目足够多以实际启用所选项目向上滚动到0位置时才有效。但是,当listView项目不够多时,或者当所选项目靠近底部时,所选项目不能再向上滚动到0 /顶部位置。

我想到的第一个解决方案是添加空行以使所选项目转到顶部位置。但是,这个解决方案并不优雅,我认为这是不好的编码实践。

我想到的第二个解决方案是完美地实现循环/关闭/循环listView。我的意思是,如果我有一个N项目清单,将发生以下情况:

当我向列表末尾滚动或向下滚动时,我应该看到起始项目:

...
...
Item N - 2
Item N - 1
Item N
Item 0 //start
...
...

同样,当我从列表的开头到结尾滚动或向上滚动时,我应该看到结束项:

...
...
Item N - 1
Item N //ending
Item 0 //start
Item 1
Item 2
...
...

并且当用户从默认位置向上滚动时应该是相同的情况,应该显示最后的项目。

我知道已有解决方案,如this question所示。但是,我无法实现the answer,因为它通过放置大量项目(大约20亿)来“欺骗”并一遍又一遍地重新填充具有相同数据源的项目。另外,正如您在getItem函数中看到的那样,它会返回Array上的假位置。

我无法使用此解决方案的原因是我使用了一定数量的数据对象。在我的适配器的getView中,我执行以下操作:

int factor = listData.get(position).getUom().getFactor();

listData是我的数据对象。这里的问题是我得到IndexOutOfBoundsException,因为我超过了原始列表计数(本案例为319,有时更少,有时更多)。但是,由于我仍然有项目(大约20亿),下面仍然有行,当他们在我的listData arrayList上查找项目编号319时,我得到了超出范围的异常。

有谁知道如何干净利落地正确实现封闭/循环/循环listView?我真的很惊讶,没有直观的方法可以像设置类属性一样。

我不想在listView的末尾添加空行以使底部项目滚动到顶部位置。

非常感谢任何帮助。谢谢。

0 个答案:

没有答案