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

如何配置RecyclerView使其不对短列表项进行视图复用?

解决方案

针对条目极少的RecyclerView场景,要禁用视图复用、让所有条目视图保留在层级内,有几种可行的实现方式:

方法1:为每个条目分配唯一的视图类型

RecyclerView的视图复用逻辑基于视图类型,只有同类型的ViewHolder才会被复用。给每个条目设置唯一的视图类型,就能让RecyclerView为每个条目创建独立的ViewHolder,不会复用已有视图:

在你的RecyclerView.Adapter中重写getItemViewType方法,返回当前条目的position作为唯一类型值:

@Override
public int getItemViewType(int position) {
    // 每个position对应唯一的视图类型
    return position;
}

这样每个条目都会生成独立的ViewHolder,所有视图都会保留在视图层级中,不会被回收复用。

方法2:自定义LayoutManager禁用视图回收

如果需要彻底禁止视图回收(比如即使条目滑出屏幕也不回收),可以自定义LayoutManager,重写recycleChildren方法,跳过回收逻辑:

public class NoRecycleLinearLayoutManager extends LinearLayoutManager {
    public NoRecycleLinearLayoutManager(Context context) {
        super(context);
    }

    @Override
    public void recycleChildren(Recycler recycler) {
        // 不执行任何回收操作,保留所有子视图
    }
}

然后给RecyclerView设置这个自定义LayoutManager:

recyclerView.setLayoutManager(new NoRecycleLinearLayoutManager(this));

这种方式会让RecyclerView完全不回收任何子视图,所有条目视图都会一直存在于视图层级内。

方法3:设置足够大的视图缓存

通过设置RecyclerView的视图缓存大小为列表总条目数,让所有ViewHolder都被缓存,不会被回收:

// 假设列表总条目数为itemCount
recyclerView.setItemViewCacheSize(itemCount);

这种方式下,RecyclerView会缓存所有ViewHolder,当需要显示条目时直接从缓存中获取,视图不会被销毁,始终保留在缓存和视图层级中,适合条目极少的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 01:02:12