Reputation: 1352
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!!!
Upvotes: 4
Views: 11860
Reputation: 4837
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
Upvotes: 13