我有 RecyclerView ,其中 GridLayoutManager 作为其LayoutManager。我想要做的是每当用户滚动rv而不是跟随手指的位置时,rv应该自动滚动到(当前+16)位置。通过这种方式,我希望rv滚动整个" 页面"立刻。
基本上,我想要的是覆盖RecyclerView的滚动行为。
起初我以为我需要对GridLayoutManager做一些事情,但我找不到一个禁用默认滚动的方法或一个让我自己捕捉所有滚动事件的界面。
我也无法通过搜索stackoverflow和其他在线资源找到明确的答案。
这甚至可能吗?
EDIT。这是我迄今为止尝试过的代码:
我试图听取newState值,希望它与rv中某个单独项的位置有关,但它只提供SCROLL_STATE_IDLE,SCROLL_STATE_DRAGGING或SCROLL_STATE_SETTLING。
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
Log.d(TAG, ""+newState);
}
});
在探测文档here时,我发现了onScrolled()方法,但是我不知道如何禁用默认滚动以便我可以捕获此事件并使用以下方式滚动rv:
mLayoutManager.scrollToPosition(mPosition);