Skip to content

【BUG】非虚拟列表在自定义itemProvider之后存在的刷新问题 #244

@JiuMengDz

Description

@JiuMengDz

游戏中会自定义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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions