--自定义属性
function ItemTips.GetCustomShow(parent, data, isPetItem)
if not data or next(data) == nil then
return nil
end
if not parent then
return
end
local str = ""
local list = GUI:ListView_Create(parent, "Cust
在`ItemTips.GetCustomShow`函数中,报错"child already added"是因为你在循环中创建了`linePanel`,并试图将其多次添加到同一个`list`中。从代码逻辑看,当`p == 4 and buff1 and buff2`条件满足时,会创建`linePanel`,但你没有检查这个`linePanel`是否已经被添加到了`list`中。
根据浮生梦老师前端课程内容,`GUI:ListView_pushBackCustomItem`要求每个控件只能被添加一次。你的代码中,`ItemTips.CreateIntervalPanel`每次都会返回一个新的`linePanel`,但如果你在后续的循环或其他地方没有正确管理,可能会导致同一个`linePanel`被重复添加。
修复方法:在调用`GUI:ListView_pushBackCustomItem`之前,确保`linePanel`没有被添加到任何父节点。你可以使用`GUI:getParent(linePanel)`来检查,如果已经有父节点,就不需要再次添加。
修改后的代码片段如下:
```lua
if p == 4 and buff1 and buff2 then
local linePanel = ItemTips.CreateIntervalPanel(list, _DefaultSpace, true)
if linePanel and GUI:Win_IsNull(GUI:getParent(linePanel)) then
GUI:ListView_pushBackCustomItem(list, linePanel)
local lineSize = GUI:getContentSize(linePanel)
listSize.height = listSize.height + lineSize.height + (_setVspace or 0)
listSize.width = math.max(listSize.width, lineSize.width)
end
end
```
这里用`GUI:Win_IsNull(GUI:getParent(linePanel))`判断`linePanel`是否已有父节点,如果为`true`(即父节点为空),才执行添加操作。这样可以避免重复添加导致的错误。
另外,检查`ItemTips.CreateIntervalPanel`函数内部是否也进行了添加操作,如果它内部已经添加了`linePanel`到`list`,那么你这里就不需要再调用`GUI:ListView_pushBackCustomItem`。根据你的代码结构,`ItemTips.CreateIntervalPanel`可能只是创建并返回面板,添加操作由外部处理,所以上述修改是合适的。
如果问题依然存在,请检查`ItemTips.CreateIntervalPanel`的实现,确保它不会在每次调用时返回同一个已添加的控件。