Jetpack Compose Paging中LazyColumn的key与contentType配置问题
Jetpack Compose Paging 带Header的列表性能优化方案
一、key参数的处理
针对PagingModel.Header无业务唯一ID的情况,可基于其label资源ID生成唯一key,同时保证和CellData的key不冲突:
key = lazyPagingItems.itemKey { item -> when (item) { is PagingModel.CellData -> item.data.id // 取DataResponse的唯一标识 is PagingModel.Header -> "header_${item.label}" } }
如果存在不同位置但label相同的Header(极端场景),可结合索引生成更唯一的key:
key = lazyPagingItems.itemKey { item, index -> when (item) { is PagingModel.CellData -> item.data.id is PagingModel.Header -> "header_${item.label}_${index}" } }
二、contentType参数的处理
contentType用于让LazyColumn区分不同类型的列表项,从而正确复用组件,不能直接返回it,需返回稳定的类型标识:
contentType = lazyPagingItems.itemContentType { item -> when (item) { is PagingModel.CellData -> CellData::class is PagingModel.Header -> Header::class } }
也可以用字符串作为标识,效果一致:
contentType = lazyPagingItems.itemContentType { item -> when (item) { is PagingModel.CellData -> "cell_data" is PagingModel.Header -> "header" } }
内容的提问来源于stack exchange,提问作者PetrHoracek
相关产品推荐
相关产品推荐

