Lib*_*bin 41 java android onscrolllistener android-recyclerview
我们如何知道用户是向下滚动还是向上滚动RecyclerView?
我尝试过RecyclerView#OnScrollListener,它给出了垂直滚动量和滚动状态.滚动状态空闲时,如何在开始拖动和滚动位置时获取最后一个滚动位置.
谢谢.
Rea*_*hed 84
接受的答案很好,但@MaciejPigulski在下面的评论中提供了更清晰,更整洁的解决方案.我只是把它作为答案在这里.这是我的工作代码.
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (dy > 0) {
// Scrolling up
} else {
// Scrolling down
}
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
// Do something
} else if (newState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
// Do something
} else {
// Do something
}
}
});
Run Code Online (Sandbox Code Playgroud)
Xci*_*egn 32
试试这种方式:
private static int firstVisibleInListview;
firstVisibleInListview = yourLayoutManager.findFirstVisibleItemPosition();
Run Code Online (Sandbox Code Playgroud)
在您的滚动侦听器中:
public void onScrolled(RecyclerView recyclerView, int dx, int dy)
{
super.onScrolled(recyclerView, dx, dy);
int currentFirstVisible = yourLayoutManager.findFirstVisibleItemPosition();
if(currentFirstVisible > firstVisibleInListview)
Log.i("RecyclerView scrolled: ", "scroll up!");
else
Log.i("RecyclerView scrolled: ", "scroll down!");
firstVisibleInListview = currentFirstVisible;
}
Run Code Online (Sandbox Code Playgroud)
Sha*_*war 12
如果向下滚动recyclerview,我想隐藏布局,然后如果向上滚动回收器视图则使其可见.我做了一些思考,想出了这个逻辑.变量y是全局静态int.不要忘记宣布y为static int y;
我希望它有助于某人:)
mRecyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(lLayout) {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
// super.onScrolled(recyclerView, dx, dy);
y=dy;
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if(mRecyclerView.SCROLL_STATE_DRAGGING==newState){
//fragProductLl.setVisibility(View.GONE);
}
if(mRecyclerView.SCROLL_STATE_IDLE==newState){
// fragProductLl.setVisibility(View.VISIBLE);
if(y<=0){
fragProductLl.setVisibility(View.VISIBLE);
}
else{
y=0;
fragProductLl.setVisibility(View.GONE);
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
另一个可以在适配器的帮助下检测滚动方向的简单解决方案:
class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyViewHolder> {
int lastItemPosition = -1;
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
if (position > lastItemPosition) {
// Scrolled Down
}
else {
// Scrolled Up
}
lastItemPosition = position;
}
}
Run Code Online (Sandbox Code Playgroud)
^ 在滚动时进行项目动画时很有帮助。
PS:这会不连续地告诉你方向,直到进一步调用 onBindViewHolder 。
| 归档时间: |
|
| 查看次数: |
67004 次 |
| 最近记录: |