mark
正想自己造轮子。。。多谢分享
mark
recycleDirty() 就是在每帧里用于检测是否需要刷新元素的. 比如 t0 时刻 界面显示1-5 索引元素, t1 时刻进行了滚动操作,根据滚动偏移计算出需要显示 2-6元素, 则 recycleDirty 会对已隐藏的 索引1元素进行回收. 并记录当前视图区范围为2-6
git 有时间整一下.
使用中 遇到一个问题, 延迟设置数据的话会导致列表无法滑动,Demo中也会复现,这是一个很常见的需求吧, 请求接口请求到数据才去setData(),
接口设计是参考安卓的listview吗?对于简单的列表感觉接口稍复杂,可以支持一下 只传一个callback来初始化item数据的方式。
使用的时候类似下面这样
我封装的是支持这种以及继承一个ListItem子类挂在item上 两种方式,用两年了还算好用
你好啊。。 最新有js版吗?
setDataSet 完应该去notify 一下.
mark…
ListView.zip (3.7 KB)
最新版本的ListView 组件.
修复各种问题,重构实现方法.
支持横版/竖版/ 网格布局.
支持整屏翻页.
使用方法:
const adapter = new PlayerListAdapter(); adapter.setDataSet(gameData.players); this.playerList.setAdapter(adapter);
class PlayerListAdapter extends ListAdapter { public updateView(item: cc.Node, posIndex: number) { const comp = item.getComponent(PlayerInfoComp); comp.setInfo(this.getItem(posIndex)); } }
需要更新数据时, 调用adapter.setDataSet()/ 并调用 list.notifyDataSetChange()
翻页:
this.list.scrollToPage()
this.list.pager.nextPage()
this.list.pager.prePage()
也就是说, 他可以用来代替PageView进行相关操作.
移动到第N个item要怎么写?
mark
public scrollToPage(pageIndex: number, pageCount?: number, timeSecond?: number);
没有单独写. 可以先用这个代替或者照搬代码自己写一个.
pageCount=1即可. 意思是每页只有一个元素. 这样pageIndex即=N
哪来的notifyDataSetChange()
ListView 中的方法.
有没有试过item节点弄复杂一点,滑动快的时候好像会空白
增加spawnCount 的数值即可.表示不可见区域会有多少个预缓存Item. 以应对快滑时的流畅性.