2016-07-05 74 views
2

我找不到任何使用ViewCacheExtension的示例或场景。该文件说:如何用RecyclerView实现ViewCacheExtension?

当getViewForPosition(INT)被调用时,连接废料 和一级缓存回收站检查,以找到匹配的视图。如果它不能找到一个合适的 查看,回收站将检查 RecyclerView.RecycledViewPool

前致电 getViewForPositionAndType(回收站,INT,INT)

我有几个相关查询:

  1. 我明白所附废料是不需要反弹的意见清单。但什么是“一级缓存”?
  2. getViewForPositionAndType()方法文档说:

这种方法不应该创建一个新的视图

我还能如何返回一个看法?我能想到的唯一方法是通过缓存ViewCacheExtension中的报废视图。当ViewCacheExtension已满时,请尝试将数据移动到RecycledViewPool。有人可以证实我是否正确?有4级缓存(废料,“第一级”,ViewCacheExtension,RecycledViewPool)有什么意义?

即使在查看RecyclerView源代码后,我也找不到正在实现的ViewCacheExtensions的引用。

回答

1

我面临着类似的问题,因为我需要缓存回收视图中的项目(我是在充气和recyclerview大小使用的视图是可变...因此每次有一个视图通货膨胀和突然冲击)

回收视图缓存已经提供了,我想回收观点不只是缓存大小设置为零

所以,当我加入这行的缓存是成功的,挺举仅是为第一次

mRecyclerView.setItemViewCacheSize(data.getCount()); 

也是我有confu以防万一用户只想缓存特定的视图。请发帖如果你有东西

希望它有帮助:)

+1

谢谢。我也采取了类似的方法,但如果data.getCount()很大,我不确定内存的副作用。 – SlowAndSteady

+0

RecyclerView中默认的'ItemViewCacheSize'为2。这用于在用户滚动时保留项目。如果您将其与数据大小相等,那么RecyclerView将无法完成其工作。我不会回收任何东西。你将失去大部分的性能收益。 – tasomaniac

相关问题