如何根据一个数组来更新scrollView的列表项

image
我这个需求是 这些UI图标,
如何根据 服务器下发的数组数据, 对这个scrollView上的列表项进行
增删改的问题

scrollView上是有自动布局的Layout组件的,按数组顺序添加,ui的显示就是对的
有什么好的办法根据 数组数据来更新 UI呢!

最初就是,scrollView->CONTENT 上的对象全部移除,再按数组数据全部新加
image

继承Array,在里面重载方法,并且实时更新赋值监听

浪费性能,不建议

1赞

是比对 数据与UI 的问题, 不是更新时机的问题

没有什么浪费的

这个东西我前后写过三次,我说的只是我最后一次的方法,你可能没理解我说的话,ui在你重载函数之后还不能实现?数据调用父类的函数不就行了?

确实没理解 也没明白你的说的!
可以详细说一下吗?

我现在就是全部移除,再重新添加

不需要这样,只需要实现指定范围的ui移除和添加就行了

省事… = =!

我现在也是这样弄的,但我觉得不好
所以看看 高人们是如何解决的!

大方向

  1. 基于数据驱动UI
  2. 数据支持插入,删除,更新
  3. 数据的每次操作(插入、删除、更新),同步更新到UI

这样子就可以「根据服务器数据操作UI」,因为本质是操作数据,只是每次操作数据「后」,更新一下UI

如果遇到 cc.Layout 不能满足的布局,那么可以尝试抛弃 cc.Layout 自己根据「数据」当前长度

  1. 重新计算 scrollview 的 content 的width height
  2. 重新计算 scrollview 的 content 的position
  3. 根据数据的下标,重新计算下标所对应的UI的position

1背包中的每个物品是一个对象(就是item 挂一个脚本的意思)
2收到数据时使用for循环创建对象(预制体)
3创建成功后将物品唯一ID和物品信息传入物品上面挂的脚本方法中
4当收到更新数据时 根据物品ID找到对应的那个对象 修改或删除 (可以通过自己写的广播事件的方式通知,也可以通过在根节点保存所有创建的实例对象来for循环 根据ID查找)

你们游戏中是 用的这种方式吗?

这个只是更新了一个 物品
但是 背包应该是个列表,列表的更新 有增删改
比如插入一个物品呀!

Layout这个组件可以根据 位置,索引 之类的 插入子组件吗?

还是可以将子组件都取出来,然后从新添加到 Layout上 实现重新排序

1、拿到服务端新数组,如果长度比老数组短,则舍弃老数组超出的元素
2、遍历新数组,与老数组同位置图标比对
相同:啥也不干
不同:替换
没有(新数组比老数组长):添加新图标,根据id计算坐标。

可以看下Node的 insertChildsetSiblingIndex接口

经典列表问题了。
方法1:最简单粗暴的方法,全删了重新创建。特点是代码写得快,缺点是性能极差。
方法2:先根据数组长度变化,决定要增加还是删除节点。 再把节点内容按着数组里对应的数据刷新一遍。 特点:节点的增删情况最优化,性能有了巨大提升。 缺点:全部节点都要重新刷新一遍内容
方法3:根据节点的增删改分别对应处理。 增删,插入或删除一个节点,其余节点内容不变,坐标更新。改动,对对应的节点更新。
特点:性能最优化 缺点:要写很多代码。