【问题标题】:RecyclerView does not auto scroll to expanded ViewHolder itemRecyclerView 不会自动滚动到展开的 ViewHolder 项目
【发布时间】:2016-08-03 02:53:57
【问题描述】:

我有一个包含我的 ViewHolder 项目列表的 RecyclerView。当用户触摸一个项目时,它的布局/视图会展开以显示更多细节。非常标准的东西,效果很好......除了在这种情况下:

如果用户滚动到列表中的最后一个项目,然后触摸它,该项目会在原地展开并移出视图。换句话说,随着项目的展开,它会扩展列表的底部,但列表不会自动滚动以将所有展开的项目“在屏幕上”或“在视图中”保持在 RecyclerView 的范围内。

我尝试将 RecyclerView.scrollToPosition() 移动到列表中的最后一个位置,但列表没有移动。

用户可以手动滚动列表并显示完整展开的项目,但我希望它自动发生。

想法?

编辑:我不知道这是否会影响事情,但列表已经手动滚动到列表底部,因此以编程方式滚动到相同位置似乎是多余的。基本上我要做的是“刷新”列表中的滚动位置,以使整个最终列表条目进入视图。

【问题讨论】:

标签: android scroll android-recyclerview


【解决方案1】:

几乎使用了 LinearLayoutManager 滚动方法。对我来说,解决方案是使用LinearLayoutManager.scrollToPositionWithOffset(),同时提供扩展视图的额外大小作为偏移量。

int distanceInPixels;
View firstVisibleChild = recyclerView.getChildAt(0);
int itemHeight = firstVisibleChild.getHeight();
int currentPosition = recyclerView.getChildAdapterPosition(firstVisibleChild);
int p = Math.abs(position - currentPosition);
if (p > 5) distanceInPixels = (p - (p - 5)) * itemHeight;
else       distanceInPixels = p * itemHeight;
layoutMgr.scrollToPositionWithOffset(position, distanceInPixels);

【讨论】:

  • 嗨,你能分享一个例子吗?我在这个问题上浪费了 6-7 个小时。
【解决方案2】:

尝试在recyclerView.scrollToPosition() 方法中使用“max_size - 1”作为位置参数。这里,max_size 是列表中的项目数。

【讨论】:

  • 正如我在原帖中所说,我试图滚动到列表中的最后一个位置,即 .scrollToPosition(max_size - 1)。顺便说一句,我还尝试使用您的条款将一个索引滚动到列表末尾,即 .scrollToPosition(max_size) 。
  • 它实际上对我有用。显然你不能超过滚动超出适配器的真正限制......谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多