You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:07:45