对嵌套RecyclerView的优化

2019-05-21 12:44:31

参考地址 对嵌套RecyclerView的优化


英文原文:Optimizing Nested RecyclerView 

RecyclerView 是一个更高级的 ListView ,它可以重用view避免额外创建太多的view从而带来流畅的滚动性能。RecyclerView通过叫做 View pool 的东西持有不再可见的 view ,让它可被回收。

有时我们需要使用嵌套的RecyclerView来创建某些布局。比如在一个垂直的RecyclerView中嵌套水平的RecyclerView。

从图中可以看到一个带横向滚动列表的垂直滚动列表。这是通过在一个recyclerView中嵌套另一个recyclerView来实现的。

当用户滚动横向列表的时候,inner RecyclerView可以流畅的滚动。但是当垂直滚动的时候, inner RecyclerView 中的每个view再次inflated了一遍,从而感觉很卡顿。这是因为每个嵌套的 RecyclerViews 都有各自的 view pool。

我们可以为所有 inner RecyclerView 设置一个单一的 view pool ,从而解决这个问题。

使用RecyclerView.setRecycledViewPool(RecycledViewPool) 方法可以帮助你设置一个自定义的 view pool,代码如下:

public OuterRecyclerViewAdapter(List<Item> items) {    //Constructor stuff    viewPool = new RecyclerView.RecycledViewPool();}
@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    //Create viewHolder etc    holder.innerRecyclerView.setRecycledViewPool(viewPool);    }

现在所有的 inner RecyclerView都是同一个 view pool了。这样就大大的减少了view的创建,提高了滚动性能。


  • 2021-01-16 09:39:32

    iOS 更改状态栏、导航栏颜色,电池颜色

    注意事项,两种方法设置View controller-based status bar appearance 的值不一样,并且如果你的plist里面没有View controller-based status bar appearance,你需要新建一个。然后就可以成功了。

  • 2021-01-16 09:45:19

    tabbar的titlePositionAdjustment设置文字距离

    指定相应的数据去偏移一个位置,向右或者向下为正值,向左或者向上为负值,不过首先你得有一个相对位置的坐标。而tabbarItem文字的坐标是底部为x轴,y轴则是tabbarItem的centerX;

  • 2021-01-16 09:49:13

    Cocoapods如何查看项目中引入库的版本号

    项目中已经安装过Cocoapods,并生成了Podfile.lock文件。 打开终端,cd命令切换到项目中的Podfile.lock文件目录下,执行命令:cat Podfile.lock 即可。也可以用文本方式打开 Podfile.lock 文件。示例如下:

  • 2021-01-18 13:50:21

    vue实现粘贴功能

    paste事件就是粘贴事件 需要通过clipboardData获得粘贴的内容