正如标题所示,我对RecyclerView Adapter回调挂钩存在问题。我目前在RecyclerView
中有6个项目,这些视图是具有自己的逻辑,动画等的自定义视图。这些视图很好,并且按预期工作。但是,当我在FrameLayout
布局上显示RecyclerView
时出现问题。 FrameLayout
并不特别,我将其Visiblity从GONE
更改为VISIBLE
。
当发生这种情况时,RecyclerView会调用这些方法:
@Override public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder)
@Override public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder)
@Override public void onViewRecycled(RecyclerView.ViewHolder holder)
调用所有位置(0 - 5)。此时,我在自定义视图中停止任何动画,并将它们重置为就绪状态。到目前为止,这似乎是合理的,视图是模糊的,所以这些钩子被称为。
问题
当我将覆盖FrameLayout
从VISIBLE
再次设置为GONE
后,RecyclerView
调用onBindViewHolder
获得前4个位置(0-3),没有被要求担任职位4& 5(确认有断点和记录)。这意味着这些职位的观点不会自我初始化 - 显然这是在onBindViewHolder
中完成的。
所以当我在同一时间在屏幕上看到RecyclerView中的所有6个视图时,我问为什么onBindViewHolder
没有调用之前回收的位置?
我会发布代码,但在这个例子中,我只讨论RecyclerView.Adapter
类的逻辑和钩子,我的实现只是使用这些钩子。
修改
我有一个有效的解决方案,而不是在我使用的onBindViewHolder
中设置自定义视图:
要重置视图:
@Override public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder)
初始化视图:
@Override public void onViewAttachedToWindow(RecyclerView.ViewHolder holder)
这两种钩子方法看起来彼此逻辑相反,并且就这样工作,但是为什么onBindViewHolder
没有为所有视图调用仍然是个谜。