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

嵌套RecyclerView新增条目后滚动卡顿掉帧问题求助

嵌套RecyclerView滚动卡顿解决方案
  • 给内层RecyclerView开启固定大小配置
    若内层RecyclerView的高度为固定值/匹配父布局高度,添加代码recyclerView.setHasFixedSize(true),避免新增条目时系统反复测量整个RecyclerView尺寸,减少不必要的布局计算开销。
  • 禁用内层RecyclerView的嵌套滚动特性
    添加代码recyclerView.setNestedScrollingEnabled(false),关闭嵌套滚动后,滚动事件仅由当前操作的RecyclerView处理,避免父子RecyclerView反复传递消费滚动事件产生的额外性能消耗。
  • 配置全局复用缓存池
    在外层RecyclerView的Adapter中初始化共享的RecycledViewPool实例,所有内层RecyclerView绑定同一个缓存池,实现多个内层列表的ViewHolder共享复用,大幅减少新增条目时的ViewHolder创建开销,示例代码:
    // 父Adapter内初始化全局缓存池
    private val sharedPool = RecyclerView.RecycledViewPool()
    
    // 绑定内层RecyclerView时设置共享池
    innerRecyclerView.apply {
        setRecycledViewPool(sharedPool)
        // 其他基础配置
    }
    
  • 优化内层列表的数据刷新逻辑
    新增条目时禁止调用notifyDataSetChanged()做全量刷新,使用DiffUtil计算新旧数据差异实现局部增量刷新,仅更新发生变化的条目,减少视图重绘次数。
  • 开启预取配置优化滚动体验
    给内层列表的LayoutManager设置预取数量,数值可设置为单屏展示的内层条目数+2,示例代码:
    val layoutManager = LinearLayoutManager(context)
    layoutManager.initialPrefetchItemCount = 6 // 可根据实际单屏展示数量调整
    innerRecyclerView.layoutManager = layoutManager
    
  • 优化内层Item绑定逻辑
    不要在onBindViewHolder中执行耗时计算、频繁触发视图刷新的操作,图片加载使用固定尺寸缓存策略,避免bind过程中触发View反复测量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:15:04