在列表里面,每行布局控件一样的, 那我还需要遍历一次 创建一次 ?还是用克隆
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-06-13 19:15:10 |
👁️ 阅读: 8
在996引擎中处理列表项时,如果每行布局一样,**推荐使用TableView的复用机制**,而不是每次都重新创建。这样可以大幅提升性能。
**正确做法:**
1. **创建TableView容器**
```lua
local tableView = GUI:TableView_Create(parent, "list_view", 0, 0, 500, 300, 1, 100, 60, 10)
```
参数说明:
- `parent`: 父节点
- `"list_view"`: 控件ID
- `0, 0`: 坐标
- `500, 300`: 宽高
- `1`: 方向(1垂直,2水平)
- `100, 60`: 单个cell的宽高
- `10`: 预创建的cell个数
2. **设置cell创建函数**
```lua
GUI:TableView_setCellCreateEvent(tableView, function(cell, index)
-- 这里只会在cell需要显示时调用
-- 可以复用cell内的子控件
if GUI:Win_IsNull(cell:getChildByName("item_bg")) then
-- 第一次创建子控件
local bg = GUI:Image_Create(cell, "item_bg", 0, 0, "res/public/1900000610.png")
local text = GUI:Text_Create(cell, "Text_name", 10, 10, 16, "#ffffff", "Item " .. index)
else
-- 复用已有控件,只需更新内容
local text = GUI:getChildByName(cell, "Text_name")
GUI:Text_setString(text, "Item " .. index)
end
end)
```
3. **设置数据数量**
```lua
GUI:TableView_setTableViewCellsNumHandler(tableView, function()
return 50 -- 返回总数据量
end)
```
**关键优势:**
- **自动复用**:滚动时引擎会自动复用不可见的cell
- **性能优化**:避免频繁创建销毁控件
- **内存友好**:只创建屏幕可见范围内的cell
**错误做法(不要用):**
```lua
-- ❌ 错误:每次遍历创建,性能差
for i = 1, 50 do
local item = GUI:Layout_Create(parent, "item_"..i, 0, i*60, 100, 60, false)
-- 每个都创建完整控件...
end
```
**总结:**
对于列表型UI,一定要使用TableView的复用机制。这是浮生梦老师在UI性能优化课程中强调的重点!TableView会自动管理cell的创建和回收,你只需要在`setCellCreateEvent`中处理单个cell的初始化即可。
← 返回问答库