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
相关产品推荐
相关产品推荐

