I need to hide and show a floating action button while I scroll up and down a RecyclerView, I have implemented this successfully under SDK 23, code shown below (newReminder is the button I need to hide and show):
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;
}
}
});
However, for SDK 23, when I use onScrollChangeListener I got confused with the parameters, my code below does not work any more:
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;
}
}
});
}
I think I misunderstood what it meant by scrollY and oldScrollY, can anyone help me? Thanks!!!
setOnScrollChangeListener(OnScrollChangeListener l) is the wrong replacement of deprecated method setOnScrollListener(OnScrollListener listener).
Use addOnScrollListener(OnScrollListener) and removeOnScrollListener(OnScrollListener) instead. These methods take the same OnScrollListener as a parameter, so you do not have to worry about changes in your logic.
The only difference from previous implementation is that now you can add more than one listener to a RecyclerView.
Here is a link to the documentation
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With