我正在使用带有 ScrollListener 的 RecyclerView:
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener()
{
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState)
{
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy)
{
super.onScrolled(recyclerView, dx, dy);
// Do my logic
}
});
当我用手指滚动时,滚动侦听器触发良好。
但是当我像那样滚动时:
mRecyclerView.scrollToPosition(LAST_POSITION);
滚动侦听器未被触发。
原文由 David 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一个已知的问题。这是由于 RecyclerView 不知道 LayoutManager 将如何处理滚动或者它是否会处理它。
在下一个版本中,如果第一个和/或最后一个子位置在布局后发生变化(这通常是调用滚动到位置的结果),您将收到对
onScrolled
的调用。不幸的是,dx 和 dy 将为 0,因为 RecyclerView 并不真正知道布局管理器滚动处理了多少
scrollTo
请求。或者,您也可以使用 ViewTreeObserver 的滚动回调。