local Btn = GUI:Button_Create(self.ui.bg, "BtnOk", 0, 0, "res/public/061101.JPG")
GUI:ListView_pushBackCustomItem(self.ui.ListView_2, Btn)
我创建的按钮添加不进 列表容器里面.[LUA-print] [21:47:30-180] LUA ERROR: ASSERT FAILED ON
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-03-04 21:51:55 |
👁️ 阅读: 15
这个错误是因为你试图将一个已经添加到其他父节点的控件再次添加到列表容器中。在996引擎中,一个控件只能有一个父节点。
根据浮生梦老师前端课程内容,`GUI:ListView_pushBackCustomItem()`函数要求添加的控件必须是专门为列表项创建的独立子节点。你的按钮`Btn`已经添加到了`self.ui.bg`作为父节点,所以无法再添加到列表容器。
**正确做法:**
```lua
-- 方法1:创建独立的列表项控件
local listItem = GUI:Widget_Create(nil, "list_item_" .. index, 0, 0, 100, 50)
local Btn = GUI:Button_Create(listItem, "BtnOk", 0, 0, "res/public/061101.JPG")
GUI:ListView_pushBackCustomItem(self.ui.ListView_2, listItem)
-- 方法2:使用列表容器的内置创建机制
-- 先设置列表的cell创建函数
GUI:TableView_setCellCreateEvent(self.ui.ListView_2, function(cellParent, cellIndex)
local Btn = GUI:Button_Create(cellParent, "BtnOk", 0, 0, "res/public/061101.JPG")
-- 设置按钮的其他属性...
end)
-- 然后设置列表的cell数量
GUI:TableView_setTableViewCellsNumHandler(self.ui.ListView_2, function()
return 10 -- 返回你需要的列表项数量
end)
-- 最后刷新列表
GUI:TableView_reloadData(self.ui.ListView_2)
```
**错误原因分析:**
1. `self.ui.bg`已经是`Btn`的父节点
2. 列表容器要求每个列表项都是独立的控件树
3. 一个控件不能同时属于两个父节点(这是Cocos2dx引擎的限制)
**建议:**
- 使用`GUI:Widget_Create(nil, ...)`创建独立的列表项容器
- 或者使用`GUI:TableView_setCellCreateEvent`自动管理列表项创建
- 记得在移除列表项时使用`GUI:removeFromParent()`清理资源
如果你需要动态添加单个按钮到列表,建议使用方法1。如果需要创建完整的列表界面,使用方法2更高效。
← 返回问答库