local benyuanzhili = {}
function benyuanzhili.main(param1, param2, param3, param4)
lib:Require(param1, function(state)
if state then
if param1 then
benyuanzhili.parent = lib:openwin(param1, nil, true, param4)
🤖 回答引擎: 前端Lua |
🕒 时间: 2026-05-02 11:27:38 |
👁️ 阅读: 5
看了你的代码,我发现了一个问题。你在创建每个主按钮时,**直接为每个ListView创建了6个子按钮**,并且这些子按钮一开始就显示出来了。这不符合"点击主按钮才出现"的需求。
根据浮生梦老师前端课程内容,正确的做法应该是:
1. **创建主按钮时,只创建对应的ListView,但不创建子按钮**
2. **点击主按钮时,才动态创建子按钮并显示**
这是修改后的代码:
```lua
-- 在upmain函数中修改创建主按钮的部分
if not benyuanzhili._inited then
GUI:removeAllChildren(ui.magic_list_view)
benyuanzhili._inited = true
end
-- 创建6个技能按钮
benyuanzhili.magic_btns = benyuanzhili.magic_btns or {}
for nameid = 1, 6 do
local magic_id = nameid
local btn = benyuanzhili.magic_btns[magic_id]
local name = "magic_btn_" .. magic_id
if GUI:Win_IsNull(btn) then
btn = GUI:Button_Create(ui.magic_list_view, name, 0, 145,
"res/yidalu/benyuanzhili/" .. magic_id .. "_1.png")
benyuanzhili.magic_btns[magic_id] = btn
GUI:addOnClickEvent(btn, function()
benyuanzhili.click_magic_btn(magic_id)
end)
-- 只创建ListView,不创建子按钮
local listViewName = "ListView_" .. magic_id
local listView = GUI:ListView_Create(btn, listViewName, 0, 0, 300, 300, 1)
-- 初始设置为不可见
GUI:setVisible(listView, false)
-- 保存ListView引用
benyuanzhili.childListViewList = benyuanzhili.childListViewList or {}
benyuanzhili.childListViewList[magic_id] = listView
end
end
```
```lua
-- 修改click_magic_btn函数
function benyuanzhili.click_magic_btn(magic_id)
local ui = benyuanzhili.parent._ui
-- 之前点击按钮的处理
if benyuanzhili.click_magic_id then
local old_btn = benyuanzhili.magic_btns[benyuanzhili.click_magic_id]
GUI:Button_loadTextureNormal(old_btn, "res/yidalu/benyuanzhili/" .. benyuanzhili.click_magic_id .. "_1.png")
GUI:setTouchEnabled(old_btn, true)
-- 隐藏之前显示的ListView
local oldListView = benyuanzhili.childListViewList[benyuanzhili.click_magic_id]
if oldListView and not GUI:Win_IsNull(oldListView) then
GUI:setVisible(oldListView, false)
-- 清空之前的子按钮
GUI:removeAllChildren(oldListView)
end
end
-- 当前点击按钮
benyuanzhili.click_magic_id = magic_id
local btn = benyuanzhili.magic_btns[magic_id]
GUI:Button_loadTextureNormal(btn, "res/yidalu/benyuanzhili/" .. magic_id .. "_2.png")
GUI:setTouchEnabled(btn, false)
-- 获取当前按钮的ListView
local listView = benyuanzhili.childListViewList[magic_id]
if listView and not GUI:Win_IsNull(listView) then
-- 显示ListView
GUI:setVisible(listView, true)
-- 动态创建6个子按钮
for childIndex = 1, 6 do
local childBtnName = "child_btn_" .. magic_id .. "_" .. childIndex
local childBtn = GUI:Button_Create(listView, childBtnName, 0, 0,
"res/yidalu/benyuanzhili/10_1.png")
-- 设置按钮标题
GUI:Button_setTitleText(childBtn, "技能" .. magic_id .. "-子按钮" .. childIndex)
-- 添加到ListView中
GUI:ListView_pushBackCustomItem(listView, childBtn)
-- 添加点击事件
GUI:addOnClickEvent(childBtn, function()
SL:Print("点击了技能" .. magic_id .. "的子按钮" .. childIndex)
end)
end
-- 布局ListView
GUI:ListView_doLayout(listView)
end
end
```
**主要修改点:**
1. **延迟创建**:子按钮不是在初始化时创建,而是在点击主按钮时才动态创建
2. **显示控制**:使用`GUI:setVisible(listView, false/true)`控制ListView的显示隐藏
3. **清理机制**:切换主按钮时,会清空并隐藏之前的ListView
4. **动态生成**:每次点击主按钮,都会重新创建6个子按钮
这样就能实现"点击主按钮才出现子按钮"的效果了。记得每次切换时清理之前的子按钮,避免内存泄漏。
看了你的代码,我发现了一个问题。你在创建每个主按钮时,**直接为每个ListView创建了6个子按钮**,并且这些子按钮一开始就显示出来了。这不符合"点击主按钮才出现"的需求。
根据浮生梦老师前端课程内容,正确的做法应该是:
1. **创建主按钮时,只创建对应的ListView,但不创建子按钮**
2. **点击主按钮时,才动态创建子按钮并显示**
这是修改后的代码:
```lua
-- 在upmain函数中修改创建主按钮的部分
if not benyuanzhili._inited then
GUI:removeAllChildren(ui.magic_list_view)
benyuanzhili._inited = true
end
-- 创建6个技能按钮
benyuanzhili.magic_btns = benyuanzhili.magic_btns or {}
for nameid = 1, 6 do
local magic_id = nameid
local btn = benyuanzhili.magic_btns[magic_id]
local name = "magic_btn_" .. magic_id
if GUI:Win_IsNull(btn) then
btn = GUI:Button_Create(ui.magic_list_view, name, 0, 145,
"res/yidalu/benyuanzhili/" .. magic_id .. "_1.png")
benyuanzhili.magic_btns[magic_id] = btn
GUI:addOnClickEvent(btn, function()
benyuanzhili.click_magic_btn(magic_id)
end)
-- 只创建ListView,不创建子按钮
local listViewName = "ListView_" .. magic_id
local listView = GUI:ListView_Create(btn, listViewName, 0, 0, 300, 300, 1)
-- 初始设置为不可见
GUI:setVisible(listView, false)
-- 保存ListView引用
benyuanzhili.childListViewList = benyuanzhili.childListViewList or {}
benyuanzhili.childListViewList[magic_id] = listView
end
end
```
```lua
-- 修改click_magic_btn函数
function benyuanzhili.click_magic_btn(magic_id)
local ui = benyuanzhili.parent._ui
-- 之前点击按钮的处理
if benyuanzhili.click_magic_id then
local old_btn = benyuanzhili.magic_btns[benyuanzhili.click_magic_id]
GUI:Button_loadTextureNormal(old_btn, "res/yidalu/benyuanzhili/" .. benyuanzhili.click_magic_id .. "_1.png")
GUI:setTouchEnabled(old_btn, true)
-- 隐藏之前显示的ListView
local oldListView = benyuanzhili.childListViewList[benyuanzhili.click_magic_id]
if oldListView and not GUI:Win_IsNull(oldListView) then
GUI:setVisible(oldListView, false)
-- 清空之前的子按钮
GUI:removeAllChildren(oldListView)
end
end
-- 当前点击按钮
benyuanzhili.click_magic_id = magic_id
local btn = benyuanzhili.magic_btns[magic_id]
GUI:Button_loadTextureNormal(btn, "res/yidalu/benyuanzhili/" .. magic_id .. "_2.png")
GUI:setTouchEnabled(btn, false)
-- 获取当前按钮的ListView
local listView = benyuanzhili.childListViewList[magic_id]
if listView and not GUI:Win_IsNull(listView) then
-- 显示ListView
GUI:setVisible(listView, true)
-- 动态创建6个子按钮
for childIndex = 1, 6 do
local childBtnName = "child_btn_" .. magic_id .. "_" .. childIndex
local childBtn = GUI:Button_Create(listView, childBtnName, 0, 0,
"res/yidalu/benyuanzhili/10_1.png")
-- 设置按钮标题
GUI:Button_setTitleText(childBtn, "技能" .. magic_id .. "-子按钮" .. childIndex)
-- 添加到ListView中
GUI:ListView_pushBackCustomItem(listView, childBtn)
-- 添加点击事件
GUI:addOnClickEvent(childBtn, function()
SL:Print("点击了技能" .. magic_id .. "的子按钮" .. childIndex)
end)
end
-- 布局ListView
GUI:ListView_doLayout(listView)
end
end
```
**主要修改点:**
1. **延迟创建**:子按钮不是在初始化时创建,而是在点击主按钮时才动态创建
2. **显示控制**:使用`GUI:setVisible(listView, false/true)`控制ListView的显示隐藏
3. **清理机制**:切换主按钮时,会清空并隐藏之前的ListView
4. **动态生成**:每次点击主按钮,都会重新创建6个子按钮
这样就能实现"点击主按钮才出现子按钮"的效果了。记得每次切换时清理之前的子按钮,避免内存泄漏。
← 返回问答库