RecyclerView scrolled UP/DOWN listener RecyclerView scrolled UP/DOWN listener java java

RecyclerView scrolled UP/DOWN listener


The accepted answer works fine, but @MaciejPigulski gave more clear and neat solution in the comment below. I just putting it as an answer here. Here's my working code.

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        }    }});


Try this way:

private static int firstVisibleInListview;firstVisibleInListview = yourLayoutManager.findFirstVisibleItemPosition();

In your scroll listener:

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;}


I wanted to hide a layout if the recyclerview is scrolled down and then make it visible if the recyclerview is scrolled up. I did some thinking and came up with this logic. Variable y is a global static int. Do not forget to declare y as static int y;

I hope it helps someone :)

 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);                    }                }            }        });