当前位置:网站首页>cocos_ Lua listview loads too much data
cocos_ Lua listview loads too much data
2022-07-05 04:56:00 【Meteor spot】
establish QuickCell file
local QuickCell = class("QuickCell", function()
return ccui.Widget:create()
end)
-- self._data.wid default 100
-- self._data.hei default 50
-- self._data.anchor default {x=0, y=0}
-- self._data.tick_interval default 0.02
-- self._data.activeEvent default inview
-- self._data.createCell default nil
function QuickCell:ctor()
self._entered = false
self._active = true
end
function QuickCell:Create( data )
local cell = QuickCell.new()
if cell and cell:Init( data ) then
return cell
end
return nil
end
function QuickCell:Init( data )
self._data = data
local wid = self._data.wid or 100
local hei = self._data.hei or 50
local anchor = self._data.anchor or {x=0, y=0}
self:setContentSize( {width = wid, height = hei} )
self:setAnchorPoint( anchor )
self:Active()
return true
end
function QuickCell:Update( data )
local createCell = data.createCell
self._data.createCell = createCell
-- Perform the following exit , Easy to refresh immediately
self:Exit()
end
function QuickCell:Enter()
if self._entered then
return false
end
self._entered = true
local createCell = self._data.createCell
local wid = self._data.wid or 100
local hei = self._data.hei or 50
if not createCell then
return false
end
local cell = createCell()
if tolua.isnull(self) then
return
end
self:addChild( cell )
if not self._data.nobool then
cell:setAnchorPoint({x=0.5, y=0.5})
cell:setPosition({x=wid/2, y=hei/2})
end
end
function QuickCell:Exit()
if not self._entered then
return false
end
self._entered = false
self:removeAllChildren()
end
function QuickCell:Refresh()
if not self._active then
return false
end
local active = true
local activeEvent = self._data.activeEvent
if activeEvent then
active = activeEvent()
elseif self._data.eventX then
local viewSize = global.Director:getVisibleSize()
local pos = self:getWorldPosition()
local wid = self._data.wid or 100
local hei = self._data.hei or 50
active = not ( pos.x >= viewSize.width + wid or pos.x <= -wid )
else
local viewSize = global.Director:getVisibleSize()
local pos = self:getWorldPosition()
local wid = self._data.wid or 100
local hei = self._data.hei or 50
active = not ( pos.y >= viewSize.height + hei or pos.y <= -hei )
end
if active then
self:Enter()
else
self:Exit()
end
end
function QuickCell:Active()
self._active = true
local tick_interval = self._data.tick_interval or 0.02
self:stopAllActions()
schedule(self, function()
self:Refresh()
end, tick_interval)
end
function QuickCell:Sleep()
self._active = false
self:stopAllActions()
end
return QuickCell
Use in another file :
local QuickCell = requireUtil("QuickCell")
function ActivityLayer:InitUI()
local size = self.Panel_item:getContentSize()
-- self.ListView_left:removeAllChildren()
for i,v in pairs(self.needData) do
local item = self.ListView_left:getItem(i-1)
if not item then
local cell_data = {}
cell_data.wid = size.width
cell_data.hei = size.height
cell_data.createCell = function()
local cell = self:CreateCell(i,v)
return cell
end
item = QuickCell:Create(cell_data)
item:setName(i)
self.ListView_left:pushBackCustomItem(item)
end
item = UIGetChildByName(item, "item")
if item then -- Refresh data only
item = ui_delegate(item)
self:updateItem(item , v ,i, true)
end
end
self.ListView_left:setSwallowTouches(false)
self.ListView_left:forceDoLayout()
end
function ActivityLayer:CreateCell(index , v )
local item = self.Panel_item:cloneEx()
item:setVisible(true)
item:setName("item")
item = ui_delegate(item)
self:updateItem(item, v,index)
return item.nativeUI
end
function ActivityLayer:updateItem(item , data ,index,isUp )
local listView = item.ListView_icon
listView:setClippingType(0)
listView:setSwallowTouches(false) -- nesting listView Slide conflict resolution
if not isUp then -- Only modify the status without regenerating
listView:removeAllChildren()
end
local rewardata = data.reward
if rewardata and not isUp then
for i,v in pairs(rewardata) do
local item1 = self.Panel_item_icon:cloneEx()
local goods = GoodsItem:create({itemId=tonumber(v.itemId), count=tonumber(v.count), look=true})
goods:setAnchorPoint(cc.p(0,0))
goods:setItemTouchSwallow(false)
goods:setScale(0.8)
item1:getChildByName("Image_icon"):addChild(goods)
item1:setVisible(true)
listView:pushBackCustomItem(item1)
end
end
item.Image_lingqu:setVisible(false)
item.Button_go:addClickEventListener(function(sender)
end)
end
边栏推荐
- Basic knowledge points
- LeetCode之单词搜索(回溯法求解)
- AutoCAD - graphic input and output
- xss注入
- AutoCAD - feature matching
- MD5绕过
- Flutter tips: various fancy nesting of listview and pageview
- Thematic information | carbon, carbon neutrality, low carbon, carbon emissions - 22.1.9
- Minor spanning tree
- 2021 higher education social cup mathematical modeling national tournament ABCD questions - problem solving ideas - Mathematical Modeling
猜你喜欢

2021 higher education social cup mathematical modeling national tournament ABCD questions - problem solving ideas - Mathematical Modeling

Unity check whether the two objects have obstacles by ray

Autocad-- dynamic zoom

Flutter 小技巧之 ListView 和 PageView 的各种花式嵌套

Unity3d learning notes
![[groovy] closure (Introduction to closure class closure | this, owner, delegate member assignment and source code analysis)](/img/aa/3c8b7b27e322417777d1315b9a5a8f.jpg)
[groovy] closure (Introduction to closure class closure | this, owner, delegate member assignment and source code analysis)

Redis 排查大 key 的4种方法,优化必备

Minor spanning tree
![[groovy] closure (closure call | closure default parameter it | code example)](/img/61/754cee9a940fd4ecd446b38c2f413d.jpg)
[groovy] closure (closure call | closure default parameter it | code example)
![[groovy] closure closure (customize closure parameters | customize a single closure parameter | customize multiple closure parameters | specify the default value of closure parameters)](/img/92/937122b059b6f3a91ae0e0858685e7.jpg)
[groovy] closure closure (customize closure parameters | customize a single closure parameter | customize multiple closure parameters | specify the default value of closure parameters)
随机推荐
Error statuslogger log4j2 could not find a logging implementation
C4D simple cloth (version above R21)
669. Prune binary search tree ●●
Flutter tips: various fancy nesting of listview and pageview
【acwing】836. Merge sets
Emlog博客主题模板源码简约好看响应式
Minor spanning tree
mysql审计日志归档
中国艾草行业研究与投资前景预测报告(2022版)
2022 thinking of mathematical modeling a problem of American college students / analysis of 2022 American competition a problem
AutoCAD - stretching
Group counting notes (1) - check code, original complement multiplication and division calculation, floating point calculation
#775 Div.1 C. Tyler and Strings 组合数学
Unity synergy
[groovy] closure (closure call is associated with call method | call () method is defined in interface | call () method is defined in class | code example)
xss注入
Unity parallax infinite scrolling background
【Leetcode】1352. 最后 K 个数的乘积
Solutions and answers for the 2021 Shenzhen cup
AutoCAD - feature matching