【发布时间】:2011-01-20 22:18:48
【问题描述】:
我想创建一个自定义的 ListView(或类似的),它的行为就像一个封闭的(圆形):
- 向下滚动 - 到达最后一项后,第一项开始(.., n-1, n, 1, 2, ..)
- 向上滚动 - 到达第一项后,最后一项开始(.., 2, 1, n, n-1, ..)
这在概念上听起来很简单,但显然没有直接的方法可以做到这一点。 谁能指出我正确的解决方案? 谢谢!
我已经收到了一个答案(来自 Streets Of Boston 在 Android-Developers google groups 上),但听起来有点难看 :) -
我通过创建自己的来做到这一点 列表适配器(子类从 BaseAdapter)。
我用这样的方式编写了我自己的列表适配器 它的 getCount() 方法返回的方式 一个巨大的数字。
如果选择了项目“x”,那么这个 item 对应于适配器 position='adapter.getCount()/2+x'
对于我的适配器的方法 getItem(int position),我看看我的 备份适配器的阵列和 获取索引上的项目: (position-getCount()/2) % myDataItems.length
你需要做一些更“特别”的事情 使一切正常工作的东西, 但你明白了。
原则上还是可以的 到达终点或起点 列表,但如果您将 getCount() 设置为 大约一百万左右,这很难 要做:-)
【问题讨论】:
-
先生。如果您坚持使用
AdapterView层次结构中的类(例如,ListView),波士顿的解决方案是唯一可用的选择。 -
我不坚持任何类型的课程。我提到 ListView 只是为了让您了解控件的行为和外观,如果需要,您也可以将其称为“表格”。一些非常自定义的东西可能是一组形成列表的单元格,当其中一个单元格超出可见区域时 - 引擎将更新(我认为来自不同的线程)它的位置(坐标)和内容(文本 + 图像) .但是这个更新过程,可能会影响滚动的流畅度。
-
我应该在哪里写 position=adapter.getcount()/2+x?
标签: android listview customization circular-buffer