检查 RecyclerView 是否需要滚动

Check whether a RecyclerView needs to scroll

我有一个回调,它是在通过 LinearLayoutManager.smoothScrollToPosition() 以编程方式滚动到 RecyclerView 的某个项目后触发的。用户点击一个项目,右侧的项目将滚动到 RecyclerView 的顶部。我对 LinearLayoutManager 进行了子类化,使其始终对齐到项目的顶部。
这在触发滚动事件的情况下有效,但是当 RecyclerView 已经处于正确位置时,我没有得到 onScrollStateChanged 回调,因为没有发生滚动。有没有办法获得那个事件?比如预先决定 RecyclerView 是否需要滚动?

希望以下代码对您有所帮助

if(LinearLayoutManager.findFirstCompletelyVisibleItem() == yourDesiredPosition) {
  //do your stuff
} else {
  LinearLayoutManager.scrollToPositionWithOffset(yourDesiredPosition, offset);
  //onScrollStateChanged would be trigger then.
}

我自己找到了以下解决方案:

// get the view the user selected
View view = mLayoutManager.findViewByPosition(index);
// get top offset 
int offset = view.getTop();
if (offset == 0) { // the view is at the top of the scrollview
    showDetailViewInternal(event);
} else {
    // scrolling
}