layabox list渲染优化

版权声明:转载注明出处 https://blog.csdn.net/qq_22794043/article/details/83099649

前面已经说过一种方法了,就是先加载图片,再渲染list,但是对于存在较多list时,这种方法存在问题,

用户虽然能迅速看到界面,这比只能看到加载时的黑色界面体验要好,但是,用户打开界面后,会看到很多的listitem

没有数据进行渲染,看到的是UI文件中的界面。

进一步优化的方法是,渲染item时选择先渲染图片,至于其他数据,走之前的渲染流程。

具体做法是,

1.在item中封装公有方法setSkin

2.在list所在类的onreload方法中,获取item,然后调用item中的setSkin方法

注意,这里有坑

1.getCell之后要用 as强制转换一次类型为待渲染的item类型

2.getCell的值可能为null,导致报错,所以要判断是否为null,不为null才能调用setSkin

扫描二维码关注公众号,回复: 4699098 查看本文章

list渲染补充:(2018-10-29)

前面说过getCell的值可能为空,那么,这样就会导致通过getCell充值list中的item时,为null的那些cell不会被重置,

举个例子,list中可见的有4个item,但是list总共有6个item,只有当前可见的cell才能通过getCell获取,需求时当前选中的item加特效突出显示,切换点击下一个item,当前高亮显示的特效清楚,下一个被点击的item加高亮特效,如果用户点击第一个item,然后滑动到最后一个item,点击最后一个item,这时候,通过getCell重置时,由于第一个item的getCell的返回值为null,不会执行重置方法,强制执行,值为null,会报错,当用户再滑动回第一个item时,会发现第一个item的高粱特效仍然存在,并没有被清除掉。

解决方法:除了需要在panel中执行item中的public方法重置高亮特效,还需要在item中setDATASOURCE时直接执行一遍重置高亮特效。因为在永华滑动list时,某个item将要出现时,会进行一次渲染。这样就可以重置了,实际上,list中的渲染并不是一次渲染完成的,当list较多,可视区以外存在item时,只会渲染可视区外的第一个item,虽然用户看上去像是一次渲染完成,而且这样做性能较好,按需加载,预加载。

猜你喜欢

转载自blog.csdn.net/qq_22794043/article/details/83099649