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

RecyclerView多ViewType场景下如何将DetailItem添加到对应RoutineItem末尾

根因分析

你当前实现中addDetail方法直接将DetailModel追加到全局列表末尾,未计算当前点击的RoutineModel所属子项的结束位置,因此所有新增的详情项都会被放到列表最后。

修复实现

重写ViewModel的addDetail方法,计算插入位置

从点击的RoutineModel所在位置的下一位开始遍历,直到遇到下一个RoutineModel或者到达列表末尾,该位置就是当前RoutineModel所属详情项的末尾,在此处插入新的DetailModel即可:

fun addDetail(pos: Int) {
    // 计算插入位置:从当前Routine的下一位开始遍历
    var insertPos = pos + 1
    while (insertPos < routines.size) {
        // 遇到下一个Routine项则停止遍历
        if (routines[insertPos] is RoutineItem.RoutineModel) break
        insertPos++
    }
    val newDetail = RoutineItem.DetailModel("1","3","3")
    // 插入新的Detail项
    routines.add(insertPos, newDetail)
    // 同步更新RoutineModel内部维护的详情列表(可选,推荐添加方便后续数据操作)
    val targetRoutine = routines[pos] as RoutineItem.RoutineModel
    targetRoutine.routineDetail = targetRoutine.routineDetail + newDetail
    _items.postValue(routines)
}

其他适配建议

如果需要实现DetailItem的删除功能,也可以用相同的遍历逻辑,找到对应RoutineModel的位置后,同步更新全局列表和RoutineModel内部的routineDetail即可。

内容的提问来源于stack exchange,提问作者ybybyb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:54:03