排行分页数据工具类

# 需要服务器返回当前页和总页数

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

 

posted @ 2022-03-23 23:56  yanghui01  阅读(25)  评论(0编辑  收藏  举报