Android Paging 3如何从列表批量添加头部元素?
Android Paging 3 批量添加头部元素解决方案
你当前的写法问题在于:每次调用insertHeaderItem()都会返回一个全新的PagingData实例,而你用getList().map { ... }会生成多个独立的PagingData,而非将所有头部元素叠加到同一个PagingData上。
要实现批量添加,你需要用**fold**来链式累加头部元素——它会以原始的pagingData为初始值,依次将每个头部元素插入进去,每次返回的新PagingData作为下一次操作的基础。
正确代码示例
fun fetchObjs(): Flow<PagingData<Obj>> { return Pager<Int, Obj>( config = PagingConfig(pageSize = 1), pagingSourceFactory = { ObjPagingSource(videoApi = videoApi) } ) .flow .map { pagingData -> // 用fold批量插入头部元素 getList().fold(pagingData) { acc, obj -> acc.insertHeaderItem(TerminalSeparatorType.FULLY_COMPLETE, obj) } } }
注意元素顺序
insertHeaderItem()是将元素添加到当前PagingData的最顶部,所以直接用fold处理原列表时,最终头部元素的顺序会和原列表相反。
比如你的getList()是[Obj("name1"), Obj("name2"), Obj("name3")],直接fold后,头部显示顺序会是name3 → name2 → name1(name3在最顶)。如果想保持原列表的顺序(name1在最顶),需要先反转列表再fold:
.map { pagingData -> getList().reversed().fold(pagingData) { acc, obj -> acc.insertHeaderItem(TerminalSeparatorType.FULLY_COMPLETE, obj) } }
这样处理后,头部元素就会按name1 → name2 → name3的顺序显示在列表最上方。
内容的提问来源于stack exchange,提问作者Tester77
相关产品推荐
相关产品推荐

