对嵌套RecyclerView的优化

泡在网上的日子 / 文 发表于2017-09-14 16:33 次阅读

英文原文: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();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //Create viewHolder etc
    holder.innerRecyclerView.setRecycledViewPool(viewPool);
    
}

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

收藏 赞 (12) 踩 (3)
上一篇:开始用Kotlin开发ARCore
真实的维京海盗有加农炮吗?我不晓得,但是增强现实里的维京海盗没有理由没有! WWDC 2017苹果发布了ARKit,杀入了AR开发的世界。Google也不甘落后,就在上周,谷歌 发布了 ARCore,一个从 Tango 项目中提取出来的项目。Tango依赖于具有深度传感器的特定设备
下一篇:如何在xml中设置 RecyclerView的 LayoutManager以及为什么不要这样做
原文: https://android.jlelse.eu/android-dtt-13-how-to-set-recyclerviews-layoutmanager-in-xml-and-why-you-shouldn-t-350da048a801 绝大多数关于RecyclerView的教程在讲到如何设置LayoutManager的时候都是这样写的: publicvoidonCreate(BundlesavedIn