RecyclerView onScrollChangeListener
RecyclerView onScrollChangeListener
我需要在 RecyclerView 上下滚动时隐藏和显示浮动操作按钮,我已经在 SDK 23 下成功实现了这个,代码如下所示(newReminder 是我需要隐藏和显示的按钮):
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (scrolledDistance > HIDE_THRESHOLD && !newReminder.isMenuButtonHidden()) {
newReminder.hideMenuButton(true);
scrolledDistance = 0;
} else if (scrolledDistance < -HIDE_THRESHOLD && newReminder.isMenuButtonHidden()) {
newReminder.showMenuButton(true);
scrolledDistance = 0;
}
if((!newReminder.isMenuButtonHidden() && dy>0) || (newReminder.isMenuButtonHidden() && dy<0)) {
scrolledDistance += dy;
}
}
});
但是,对于 SDK 23,当我使用 onScrollChangeListener 时,我对参数感到困惑,我下面的代码不再起作用:
if(Build.VERSION.SDK_INT > 22){
recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY)
if (scrolledDistance > HIDE_THRESHOLD && !newReminder.isMenuButtonHidden()) {
newReminder.hideMenuButton(true);
} else if (scrolledDistance < -HIDE_THRESHOLD && newReminder.isMenuButtonHidden()) {
newReminder.showMenuButton(true);
}
if((!newReminder.isMenuButtonHidden() && scrollY > 0)
|| (newReminder.isMenuButtonHidden() && scrollY < 0)) {
scrolledDistance = oldScrollY - scrollY;
}
}
});
}
我想我误解了 scrollY 和 oldScrollY 的意思,谁能帮助我?谢谢!!!
setOnScrollChangeListener(OnScrollChangeListener l)
是已弃用方法 setOnScrollListener(OnScrollListener listener)
.
的错误替换
请改用 addOnScrollListener(OnScrollListener)
和 removeOnScrollListener(OnScrollListener)
。这些方法采用相同的 OnScrollListener
作为参数,因此您不必担心逻辑会发生变化。
与以前实现的唯一区别是,现在您可以向 RecyclerView 添加多个侦听器。
这里是link到documentation
我需要在 RecyclerView 上下滚动时隐藏和显示浮动操作按钮,我已经在 SDK 23 下成功实现了这个,代码如下所示(newReminder 是我需要隐藏和显示的按钮):
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (scrolledDistance > HIDE_THRESHOLD && !newReminder.isMenuButtonHidden()) {
newReminder.hideMenuButton(true);
scrolledDistance = 0;
} else if (scrolledDistance < -HIDE_THRESHOLD && newReminder.isMenuButtonHidden()) {
newReminder.showMenuButton(true);
scrolledDistance = 0;
}
if((!newReminder.isMenuButtonHidden() && dy>0) || (newReminder.isMenuButtonHidden() && dy<0)) {
scrolledDistance += dy;
}
}
});
但是,对于 SDK 23,当我使用 onScrollChangeListener 时,我对参数感到困惑,我下面的代码不再起作用:
if(Build.VERSION.SDK_INT > 22){
recyclerView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY)
if (scrolledDistance > HIDE_THRESHOLD && !newReminder.isMenuButtonHidden()) {
newReminder.hideMenuButton(true);
} else if (scrolledDistance < -HIDE_THRESHOLD && newReminder.isMenuButtonHidden()) {
newReminder.showMenuButton(true);
}
if((!newReminder.isMenuButtonHidden() && scrollY > 0)
|| (newReminder.isMenuButtonHidden() && scrollY < 0)) {
scrolledDistance = oldScrollY - scrollY;
}
}
});
}
我想我误解了 scrollY 和 oldScrollY 的意思,谁能帮助我?谢谢!!!
setOnScrollChangeListener(OnScrollChangeListener l)
是已弃用方法 setOnScrollListener(OnScrollListener listener)
.
请改用 addOnScrollListener(OnScrollListener)
和 removeOnScrollListener(OnScrollListener)
。这些方法采用相同的 OnScrollListener
作为参数,因此您不必担心逻辑会发生变化。
与以前实现的唯一区别是,现在您可以向 RecyclerView 添加多个侦听器。
这里是link到documentation