【问题标题】:Smoothscroll with RecyclerView put item on bottom of list使用 RecyclerView 的 Smoothscroll 将项目放在列表底部
【发布时间】:2015-05-13 04:36:56
【问题描述】:

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

这是我用来设置RecyclerView的代码:

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);
}

【问题讨论】:

  • 不要使用代码 sn-ps... 仅适用于 HTML 或 javascript 可以在浏览器中运行。对于每种编程语言,都使用普通代码块。如果你能正确地格式化你的代码并改进你的拼写,它也不会受到伤害......这次我已经在你的答案中修复了所有这些,但下次尝试自己做对。

标签: android scroll android-recyclerview


【解决方案1】:

您必须计算一个屏幕上可以容纳多少项目,并在滚动时将其用作偏移量!您可以使用LayoutManagerfindFirstCompletelyVisibleItemPosition()findLastCompletelyVisibleItemPosition() 方法来计算偏移量,如下所示:

int offset = getLayoutManager()).findLastCompletelyVisibleItemPosition() 
           - getLayoutManager()).findFirstCompletelyVisibleItemPosition();

一旦你有了偏移量,你就可以像这样滚动:

recycleView.smoothScrollToPosition(Math.min(position + offset + 1, adapter.getItemCount()));

【讨论】:

  • 您发布的代码无法编译。在getLayoutManager() 调用之后还有一些额外的)。除此之外,此方法仅在 RecyclerView 中的所有项目具有相同高度时才有效。我还修复了您帖子的一些格式问题...
猜你喜欢
  • 2021-08-18
  • 2018-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多