排行分页数据工具类
# 需要服务器返回当前页和总页数
local Pager = {} Pager.__index = Pager function Pager.new() local obj = {} setmetatable(obj, Pager) obj:ctor() return obj end function Pager:ctor() self.sendTimeout = 2 self.itemsPerPage = 10 self.firstPageNum = 1 self.sendTime = 0 ---数据返回前, 用于检测是否发送超时; 超时或数据返回后可置为0 self.loadedPage = 0 ---已加载数据页数, 数据成功返回后才设置 self.totalPage = 0 self.allDataLoaded = false end function Pager:SetSendTimeout(t) self.sendTimeout = t end function Pager:SetItemsPerPage(n) self.itemsPerPage = n end function Pager:SetFirstPageNum(n) self.firstPageNum = n end function Pager:GetLoadedPage() return self.loadedPage end function Pager:GetTotalPage() return self.totalPage end function Pager:IsAllDataLoaded() return self.allDataLoaded end ---发送超时或者数据返回时, 才可继续请求 function Pager:IsLoading() local nowUtcSec = os.time() local elapseTime = nowUtcSec - self.sendTime if elapseTime <= self.sendTimeout then return true end return false end function Pager:LoadBegin(isFirstPage) if isFirstPage then self.loadedPage = self.firstPageNum - 1 self.totalPage = 0 self.allDataLoaded = false end self.sendTime = os.time() return self.loadedPage + 1 end function Pager:LoadTimeout() self.sendTime = 0 end function Pager:LoadEnd(currPage, totalPage) self.sendTime = 0 self.loadedPage = currPage self.totalPage = totalPage self.allDataLoaded = currPage >= totalPage end return Pager
# 界面部分伪码
local Pager = require("Pager") local Map = require("Map") local _rankDataMap = nil local _pager = nil ---界面创建时 function Awake() _rankDataMap = Map.new() _pager = Pager.new() local toLoadPage = _pager:LoadBegin(true) --请求api end ---排行数据返回时 function OnRecvPageData(pageData) _pager:LoadEnd(pageData.currPage, pageData.totalPage) local rankList = pageData.rankList for i=1,#rankList do local rankData = rankList[i] _rankDataMap:Set(rankData.rank, rankData) end end ---列表最后一条可见时, 加载更多数据 function OnListView_LastItemVisible() if _pager:IsLoading() then return end if _pager:IsAllDataLoaded() then return end local toLoadPage = _pager:LoadBegin() --请求api end