RecyclerView 项目大小变化时跳转

RecyclerView jump when item size changes

我偶然发现了一个关于 RecyclerView 的问题。情况如下:

  1. 我从一个 Activity 导航到另一个,第二个有一个 RecyclerView
  2. 第二个 activity 从 Intent 中读取索引并将其 RecyclerView 跳转到该位置(因此它可能 "start" 在中间,来自用户透视)
  3. RecyclerView 包含一个新闻列表,每个新闻都有一个网络获取的缩略图
  4. 缩略图是使用 Glide 获得的,带有占位符(因此 ViewHolder 中的 View 首先会膨胀 X 高度,这可能获取缩略图后更改)

现在的问题是,当用户从他们启动的项目向上滚动时,会创建 ViewHolder 并且 Glide 会请求缩略图。它导致列表项具有一定的高度,并在获得缩略图后一秒钟后更改它,这反过来导致令人讨厌的 "jump" (因为大小更改)。它只会发生 3-4 次,直到创建足够的 ViewHolders 来处理整个 RecyclerView.

知道如何防止这种情况发生吗?理想情况下,我想让当前项目向上扩展。

我已经试过让物品从底部堆叠起来,但这并没有解决问题,只是让下面的物品而不是上面的物品发生这种情况。另外,我不能也不想预测获得的缩略图的大小。

我会在回收视图中使用占位符图像。并在可用(下载)时替换该图像。

这当然只有在您知道缩略图的大小的情况下才有效。