How to save and restore scrolling position of the RecyclerView in a fragment when coming back from other activity to the same fragment?

After paying so many days, after trying many many solutions, finally found a working solution for my problem, thanks to https://stackoverflow.com/a/42563804/2128364

I've moved the working solution to another methods to make it work in the fragment.

Maybe this can save someone's day, Here is how it worked:

  1. onConfigurationChanged (as suggested in original solution), onSaveInstanceState or onViewRestoredState methods doesn't work, So you need onPause and onResume methods to save and restore the state respectively.
  2. You have to save the state in onPause method:

    mBundleRecyclerViewState = new Bundle();    
    
    mListState = mRecyclerView.getLayoutManager().onSaveInstanceState();
    
    mBundleRecyclerViewState.putParcelable(KEY_RECYCLER_STATE, mListState);
    
  3. And then Restore it in onResume Method:

       if (mBundleRecyclerViewState != null) {
            new Handler().postDelayed(new Runnable() {
    
                @Override
                public void run() {
                    mListState = mBundleRecyclerViewState.getParcelable(KEY_RECYCLER_STATE);
                    mRecyclerView.getLayoutManager().onRestoreInstanceState(mListState);
    
                }
            }, 50);
        }
    
    
        mRecyclerView.setLayoutManager(staggeredGridLayoutManager);