laya虚拟列表赋值数据执行2次itemRenderer函数

123.png

如图所示,执行 this.list.numItems = this._data.length; 之后 setItemRender 函数会执行2次;也就是会刷新整个列表2次.这样是正常的吗? 没有办法限制它只刷一次呢? 因为赋值后断点看到index=0的情况会有2次。从0到最大值一次后又刷了一次0到最大值
 
已邀请:

谷主

赞同来自:

debug吧。或者用demo测试。

newlearn

赞同来自:

123.png


456.png

这个是demo执行2次的堆栈 

谷主

赞同来自:

那就两次吧,没多大事

路北

赞同来自:

setVirtual 里面调用了 setVirtualListChangedFlag,
setVirtualListChangedFlag 有一个 
Laya.timer.callLater(this, this._refreshVirtualList); 延迟执行了一次,所以在setVirtual后会延迟执行一次
 
然后设置 numItems 后会立即执行一次。 
 一共两次,
 

路北

赞同来自:

看了下laya源码,发现laya.timer 的calllater 会另外存到 CallLater类的对象里面,而且CallLater 和 laya.Timer里面的key 的计算方式是不一致的, 所以谷主那个虚拟列表里面调用的Laya.timer.clear(this, this._refreshVirtualList); 实际并没有生效, 可能laya不支持手动清空calllater。
希望谷主解决一下这个问题~
 

要回复问题请先登录注册