in my RecyclerView i have some items that user can scroll and see that, now i want to save this position and scroll that after come back, this below code return 0 always and i cant save that
recyclerMarketLists.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
recyclerViewCurrentScrolledPosition = recyclerMarketLists.getScrollY();
Log.e("Y: ", recyclerViewCurrentSceolledPosition + "");
}
});
the Logcat:
07-07 18:28:30.919 2124-2124/com.sample.presentationproject E/Y:: 0
解决方案
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
LayoutManager to a LinearLayoutManager or GridLayoutManager
(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: