Java 如何检测带有SnapHelper的RecyclerView何时滚动到下一个项目?

Java 如何检测带有SnapHelper的RecyclerView何时滚动到下一个项目?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我有一个带有SnapHelper的RecyclerView,可以使用类似RecyclerView的ViewPager逐个浏览项目(如PagerView) 如何检测用户何时刷到下一个RecyclerView项目 我尝试过使用onScrollStateChanged和onScrolled的addOnScrollListener,但当用户从一个项目滚动到下一个项目时,它们调用了很多次 你知道我如何检测用户何时刷到下一个RecyclerView项目吗 谢谢 SnapHelper类: public cla

我有一个带有SnapHelper的RecyclerView,可以使用类似RecyclerView的ViewPager逐个浏览项目(如PagerView)

如何检测用户何时刷到下一个RecyclerView项目

我尝试过使用onScrollStateChanged和onScrolled的addOnScrollListener,但当用户从一个项目滚动到下一个项目时,它们调用了很多次

你知道我如何检测用户何时刷到下一个RecyclerView项目吗

谢谢

SnapHelper类:

public class SnapHelperOneByOne extends LinearSnapHelper {
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager 
layoutManager, int velocityX, int velocityY) {

    if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
        return RecyclerView.NO_POSITION;
    }
    final View currentView = findSnapView(layoutManager);
    if (currentView == null) {
        return RecyclerView.NO_POSITION;
    }
    LinearLayoutManager myLayoutManager = (LinearLayoutManager) 
 layoutManager;
    int position1 = myLayoutManager.findFirstVisibleItemPosition();
    int position2 = myLayoutManager.findLastVisibleItemPosition();
    int currentPosition = layoutManager.getPosition(currentView);
    if (velocityX > 400) {
        currentPosition = position2;
    } else if (velocityX < 400) {
        currentPosition = position1;
    }
    if (currentPosition == RecyclerView.NO_POSITION) {
        return RecyclerView.NO_POSITION;
    }
    return currentPosition;
}
}
公共类SnapHelperOneByOne扩展了LinearSnapHelper{
@凌驾
public int findtargetsnaposition(RecyclerView.LayoutManager
布局管理器,int velocityX,int velocityY){
if(!(RecyclerView.SmoothScroller.ScrollVectorProvider的layoutManager实例)){
返回RecyclerView.NO_位置;
}
最终视图currentView=findSnapView(布局管理器);
如果(currentView==null){
返回RecyclerView.NO_位置;
}
LinearLayoutManager myLayoutManager=(LinearLayoutManager)
布局经理;
int position1=myLayoutManager.findFirstVisibleItemPosition();
int position2=myLayoutManager.findLastVisibleItemPosition();
int currentPosition=layoutManager.getPosition(currentView);
如果(速度x>400){
当前位置=位置2;
}否则如果(速度x<400){
当前位置=位置1;
}
如果(currentPosition==RecyclerView.NO_位置){
返回RecyclerView.NO_位置;
}
返回当前位置;
}
}