Android 列表底部带有RecyclerView放置项的平滑滚动

Android 列表底部带有RecyclerView放置项的平滑滚动,android,scroll,android-recyclerview,Android,Scroll,Android Recyclerview,我希望用户能够在RecyclerView中导航到某些位置。我可以确定项目的位置,当我使用recycleView.smoothScrollToPosition()时,它会滚动到正确的项目。 问题是此项位于屏幕底部。如何滚动以使项目显示在顶部(它必须是第一个可见的项目) 下面是我用来设置回收视图的代码: recyclerView = (RecyclerView)findViewById(R.id.recyclerview); recyclerView.setHasFixedSize(false);

我希望用户能够在
RecyclerView
中导航到某些位置。我可以确定项目的位置,当我使用
recycleView.smoothScrollToPosition()时,它会滚动到正确的项目。
问题是此项位于屏幕底部。如何滚动以使项目显示在顶部(它必须是第一个可见的项目)

下面是我用来设置回收视图的代码:

recyclerView = (RecyclerView)findViewById(R.id.recyclerview);
recyclerView.setHasFixedSize(false);
recyclerView.setAdapter(actionAdapter);
final LinearLayoutManager layoutManager = new LinearLayoutManager(InteractionTimelineActivity.this, LinearLayoutManager.VERTICAL, false);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setOnScrollListener(new RecyclerScrollListner());
我就是这样滚动的:

if (recycleView != null) {               
    recycleView.smoothScrollToPosition(position + 1);
}

您必须计算一个屏幕上适合的项目数,并在滚动时将其用作偏移量!您可以使用
LayoutManager的
findFirstCompletelyVisibleItemPosition()
findLastCompletelyVisibleItemPosition()
方法计算偏移量,如下所示:

int offset = getLayoutManager()).findLastCompletelyVisibleItemPosition() 
           - getLayoutManager()).findFirstCompletelyVisibleItemPosition();
recycleView.smoothScrollToPosition(Math.min(position + offset + 1, adapter.getItemCount()));
一旦有了偏移量,就可以像这样滚动:

int offset = getLayoutManager()).findLastCompletelyVisibleItemPosition() 
           - getLayoutManager()).findFirstCompletelyVisibleItemPosition();
recycleView.smoothScrollToPosition(Math.min(position + offset + 1, adapter.getItemCount()));

不要使用代码段。。。只有HTML或javascript可以在浏览器中运行。对于每种编程语言,使用普通代码块。如果你能正确地格式化你的代码并改进你的拼写,这也不会有什么坏处。。。这一次我已经在你的答案中解决了所有问题,但是下次你自己试着把它弄对。你发布的代码没有编译。在调用
getLayoutManager()
之后,还有一些额外的
。除此之外,只有当
RecyclerView
中的所有项目具有相同高度时,此方法才有效。我还修复了你的帖子的一些格式问题。。。