-
Notifications
You must be signed in to change notification settings - Fork 660
Open
Description
游戏中会自定义itemProvider以混杂不同类型的item在一个列表中展示。
但是在使用过程中发现如果对【非虚拟列表】的对象是以下顺序设置,则会导致错误的结果
1、首次设置 AAABBB 能得到正确的显示结果
2、二次设置 BBB 时,最终显示的则是 AAA
阅读源码后发现,非虚拟列表的情况下,设置numItems只会对新增部分执行itemProvider操作,所以有问题
以下是我的解决方式,希望作者可以帮忙看看这个处理是否有问题?亦或者有其他更好的处理方式
//在numItems的赋值部分,非虚拟列表环节新增以下前置处理 将旧的Item刷新一次
//如果有自定义的itemProvider 则刷新一遍旧的Child
if (itemProvider != null)
{
var tar = Mathf.Min(value, cnt);
for (int i = 0; i < tar; i++)
{
GObject obj = GetChildAt(i);
var url = UIPackage.NormalizeURL(itemProvider(i));
if (!obj.resourceURL.Equals(url))
{
GObject new_obj = GetFromPool(url);
if (obj.asButton != null && new_obj.asButton != null)
{
new_obj.asButton.selected = obj.asButton.selected;
}
AddChildAt(new_obj, i);
RemoveChildToPoolAt(i + 1);
}
}
}
Metadata
Metadata
Assignees
Labels
No labels