Skip to content

Commit 31bff4e

Browse files
Nick Lefevermeta-codesync[bot]
authored andcommitted
Restore scroll state of horizontal scroll view on mount (facebook#54001)
Summary: Pull Request resolved: facebook#54001 This diff adds support for state restore to the horizontal scroll view. The same logic was applied as for the vertical scroll view. The only difference being that the shadow node for the horizontal scroll view needed to be updated to add `ScrollState`. Changelog: [Internal] Reviewed By: rshest Differential Revision: D83247017 fbshipit-source-id: 7c26901df4c43ed70addc7b6d8afb9a6d3e549a8
1 parent 2bbea50 commit 31bff4e

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import android.content.Context;
1919
import android.graphics.Canvas;
2020
import android.graphics.Color;
21+
import android.graphics.Point;
2122
import android.graphics.Rect;
2223
import android.graphics.drawable.ColorDrawable;
2324
import android.graphics.drawable.Drawable;
@@ -1652,6 +1653,10 @@ public void setStateWrapper(StateWrapper stateWrapper) {
16521653
@Override
16531654
public void setReactScrollViewScrollState(ReactScrollViewScrollState scrollState) {
16541655
mReactScrollViewScrollState = scrollState;
1656+
if (ReactNativeFeatureFlags.enableViewCulling()) {
1657+
Point scrollPosition = scrollState.getLastStateUpdateScroll();
1658+
scrollTo(scrollPosition.x, scrollPosition.y);
1659+
}
16551660
}
16561661

16571662
@Override

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,9 @@ constructor(private val fpsListener: FpsListener? = null) :
8585
stateWrapper: StateWrapper,
8686
): Any? {
8787
view.setStateWrapper(stateWrapper)
88+
if (ReactNativeFeatureFlags.enableViewCulling()) {
89+
ReactScrollViewHelper.loadFabricScrollState(view, stateWrapper)
90+
}
8891
return null
8992
}
9093

packages/react-native/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/AndroidHorizontalScrollContentViewShadowNode.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
#pragma once
99

10+
#include <react/renderer/components/scrollview/ScrollViewEventEmitter.h>
11+
#include <react/renderer/components/scrollview/ScrollViewState.h>
1012
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
1113
#include <react/renderer/core/LayoutContext.h>
1214

@@ -17,7 +19,9 @@ extern const char AndroidHorizontalScrollContentViewShadowNodeComponentName[];
1719
class AndroidHorizontalScrollContentViewShadowNode final
1820
: public ConcreteViewShadowNode<
1921
AndroidHorizontalScrollContentViewShadowNodeComponentName,
20-
ViewProps> {
22+
ViewProps,
23+
ScrollViewEventEmitter,
24+
ScrollViewState> {
2125
public:
2226
using ConcreteViewShadowNode::ConcreteViewShadowNode;
2327
void layout(LayoutContext layoutContext) override;

0 commit comments

Comments
 (0)