YmBok
搜索 充值水晶

Pagging3写起来太麻烦,简单封装及其简单

Pagging3分页写起来很麻烦,这里分享一下我的简化开发的方法,思路就是把获取数据的函数分离出来

首先定义一个基础的PagingSource接收任意类型的数据条目类型,可以看出这里将获取key的函数都实现好了,我们就不用关心了,只需要关注open suspend fun getData类的实现即可

另外推荐一个Kotlin Android开发的工具包 https://github.com/ym6745476/kohelper 这里封装好了一些工具类,可以简化开发过程。

open class KoPagingSource<T : Any>(private val pageSize:Int) : PagingSource<Int, T>() {


    override fun getRefreshKey(state: PagingState<Int, T>): Int? {
        return null
    }

    override suspend fun load(params: LoadParams<Int>): LoadResult<Int, T> {

        return try {
            val page = params.key ?: 1
            val loadSize = params.loadSize

            var list = getData(page,loadSize)

            return  LoadResult.Page(
                    data = list,
                    prevKey = getPrevKey(page),
                    nextKey = getNextKey(list.size,loadSize,page,pageSize)

            )
        } catch (e: Exception) {
            e.printStackTrace()
            LoadResult.Error(e)
        }

    }

    open suspend fun getData(page:Int, loadSize:Int):List<T>{
        return ArrayList()
    }

    fun getPrevKey(page:Int):Int?{
        var prevKey: Int?
        if(page == 1){
            prevKey = null
        }else{
            prevKey = page - 1
        }
        return prevKey
    }

    fun getNextKey(size:Int,loadSize:Int,page:Int,pageSize:Int):Int?{
        var nextKey: Int?
        if(page == 1){
            nextKey = if (size < pageSize) null else loadSize/pageSize  + 1
        }else{
            nextKey = if (size < pageSize) null else page + 1
        }
        return  nextKey
    }
}

KoPagingSource是我们封装好的用于分页的基础类,我们自己的业务代码继承自这个KoPagingSource<News>(pageSize)就可以了。

class NewsPagingSource(private val commonRepository: CommonRepository, pageSize:Int) : KoPagingSource<News>(pageSize) {

    override suspend fun getData(page:Int, loadSize:Int):List<News>{
        val result = commonRepository.newsList(page,loadSize)
        //delay(2000)
        if(result.success){
            return result.data!!.list
        }
        return ArrayList()
    }

}

注意这里的范型类型的传参。



内容来源与作者发布和网络,如有版权相关问题请及时与我们取得联系,我们将立即删除。

关于作者

还如一梦中 点击这里给我发消息

相关推荐

希望你会喜欢本站的内容

《传奇世界》手游修改教程之怪物掉落设置

下面讲解如何修改传世世界手游中的物品掉落,再原始的版本中,掉落的设置无法满足玩家的喜欢,我们需要自己修改,有简单的方法,也有费时的方法,先教大家基础的方法,后面教大家快捷的方法。 首先再客户

2022-07-06 还如一梦中
《传奇世界》手游修改教程之道士BB召唤

道士控制自己技能召唤的宝宝,服务端/data/sbin/resource/script/system/skill 打开SkillScript.lua --新的道士宝宝召唤机制 SkillSc

2022-07-06 还如一梦中
《传奇世界》手游修改教程之攻沙时间修改

客户端和服务端ShaWarDB,关键的字段是时间逗号后面那个数字: --攻沙时间设置 改为3天后 local Items = { {holdTimes = 5,defensePos = '{x

2022-07-06 还如一梦中
《传奇世界》手游修改教程之Luac4加密

Lua是游戏的脚本一般不会直接打包到app里,要先加密为luac4,在传奇世界手游里android可以支持luac4,但苹果不行 我们通过lua编译工具(tools/luaecode)编译l

2022-07-06 还如一梦中
《一梦传世》元神版本纯源码手工编译教程

《一梦传世》 元神 版本纯源码手工编译 全部文件包含服务端与客户端(其中包含AndroidStudio工程,Eclipse工程,IOS工程)目录如下: 分别稍稍下目录内容: ymwe

2022-07-06 还如一梦中
白鹭冰雪源码编译服务端VIP教程

2022-07-02 还如一梦中
白鹭冰雪源码编译客户端VIP教程

2022-07-02 还如一梦中
刺客传奇引擎架设教程

荐服务端系统环境 Win Server 2008 64位 一、将服务端拷贝到服务器,解压YmcqServer.zip。 二、安装64位DBC2000: 安装DBC_2000,安装成功后打开安装目录,

2022-06-07 还如一梦中
刺客引擎编译打包修改免费视频教程(六)

6、delphi引擎服务端编译

2022-06-07 还如一梦中
刺客引擎编译打包修改免费视频教程(五)

5、CocosStudio修改UI

2022-06-07 还如一梦中

友情链接