当前情况
我正在使用这个库 https://github.com/kanytu/android-parallax-recyclerview 在 RecyclerView 上实现视差效果。目前为止,一切都很好。但是,我想要像 Google Newsstand 一样获得一个效果,在这个效果中,标题仍在卡片下面。
问题
问题在于 RecyclerView(或 LinerLayoutManager)在列表的第一个元素接触到父视图顶部的瞬间就会分离标题视图:
如您所见,第一个 CardView 接触到顶部的瞬间便是 RecyclerView 分离标题的瞬间。
我确信逻辑本身没有问题,因为当卡片到达顶部时,我得到了RecyclerView.findViewHolderForPosition(0) == null
,证明标题已被回收。
尝试的解决方案
我尝试了很多方法,比如:
ViewHolder.setIsRecyclable 使用此方法将持有者设置为不可回收,但没有任何效果。
LayoutManager.ignoreView 我尝试将视图标记为被忽略的,使其不被丢弃和回收。结果是会抛出一个异常,说:
Trying to recycle an ignored view holder. You should first call stopIgnoringView(view) before calling recycle.
setItemViewCacheSize 没有任何效果。我尝试调用 setItemViewCacheSize(50)
,但它对标题没有任何影响。
setMaxRecycledViews 尝试将 viewType=HEADER 的最大回收视图设置为 0,但它仍然进行回收。
结论
因此我怀疑是否有任何方法可以将该项标记为不被分离,直到我下达指令(例如检查它是否仍然可见,然后将其分离)。
这也是一个在 Github 上的问题:https://github.com/kanytu/android-parallax-recyclerview/issues/7
setItemViewCacheSize
会影响它吗?https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#setItemViewCacheSize(int) - darnmasongetRecycledViewPool().setMaxRecycledViews()
也没有用。 - Pedro Oliveira