android - recyclerview 添加滚动监听器
问题描述
我有一个RecyclerView
水平的LinearLayoutManager
。我想检查一下ScrollListener
。我的目标是检查这些步骤:
- 检查何时
RecyclerView
开始滚动 - 检查何时
RecyclerView
结束滚动 - 检查
RecyclerView
滚动何时处于中心位置
这是我的RecyclerView
代码LinearLayoutManager
。
LinearLayoutManager horizontalManager = new LinearLayoutManager(context);
horizontalManager.setOrientation(LinearLayoutManager.HORIZONTAL);
viewHolderStory.recyclerView.setLayoutManager(horizontalManager);
viewHolderStory.recyclerView.addItemDecoration(new PaddingItemDecoration((Activity) context));
viewHolderStory.recyclerView.setHasFixedSize(true);
viewHolderStory.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
});
viewHolderStory.recyclerView.setNestedScrollingEnabled(false);
有什么方法可以在我的 addOnScrollListener 方法上添加验证?
解决方案
您可以使用computeVerticalScrollExtent()
和computeVerticalScrollOffset()
computeVerticalScrollRange()
如果您的回收器视图是水平的,则这些功能具有水平对应物
完整代码:
viewHolderStory.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener()
{
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
int extent = recyclerView.computeVerticalScrollExtent();
int offset = recyclerView.computeVerticalScrollOffset();
int range = recyclerView.computeVerticalScrollRange();
if(offset == 0){
//fire when recycler view hit top
Log.i("myTag", "onScrolled: top");
}
else if(offset + extent == range){
//fire when recycler view hit bottom
Log.i("myTag", "onScrolled: bottom");
}
else {
//fire the rest of the time
Log.i("myTag", "onScrolled: middle");
}
}
});