RecyclerView不会自动滚动到展开的ViewHolder项目

时间:2016-08-03 02:53:57

标签: android scroll android-recyclerview

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

如果用户滚动到列表中的最后一项,然后触摸它,该项目就会扩展到视野之外。换句话说,当项目展开时,它会扩展列表的底部,但列表不会自动滚动以将所有展开的项目保持在“在屏幕上”或“在视图中”在RecyclerView的范围内。

我已经尝试将RecyclerView.scrollToPosition()添加到列表中的最后一个位置,但列表不会移动。

用户可以手动滚动列表并将完整展开的项目置于视图中,但我希望它自动发生。

思想?

编辑:我不知道这是否影响了事情,但是列表已经手动滚动到列表的底部,所以看起来像programmaticaly滚动到相同位置是多余的。基本上我要做的是“刷新”列表中的滚动位置,以便将整个最终列表条目带入视图。

2 个答案:

答案 0 :(得分:2)

我使用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);

答案 1 :(得分:0)

尝试使用“max_size - 1”作为 import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject'; @Injectable() export class UserService { // Observable user user = new Subject<string>(); } 方法中的位置参数。在这里,max_size是列表中的项目数。