You are trying to get the info on the wrong object. It is not the RecyclerView nor the Adapter responsibility but the RecyclerView’s LayoutManager.
Instead of the generic ViewTreeObserver.OnScrollChangedListener() I would recommend to add instead the RecyclerView.OnScrollListener and use the onScrollStateChanged(RecyclerView recyclerView, int newState) callback which gives you the newState, you should use SCROLL_STATE_IDLE to fetch its position. Meaning:
yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();
As Rik van Velzen pointed out, you probably need to cast your
LayoutManagerto aLinearLayoutManagerorGridLayoutManager
(you have to cast to the correct type you are using) to access these
findVisibleXXXX()methods.
On said callback method. Hope I made this clear enough for your, you can find documentation on the classes here:
RecyclerView.OnScrollListener
yigit’s (Google) response on visible positions