From ef596dec49975dd4f8860ad8adcd29dd23e04c14 Mon Sep 17 00:00:00 2001 From: Oleg Lokhvitsky Date: Fri, 2 Feb 2018 16:01:19 -0800 Subject: [PATCH] Fix initialScrollIndex for Android Reviewed By: sahrens Differential Revision: D6885608 fbshipit-source-id: c153fcb5c2552982481d8af8b9755ae035e9b293 --- Libraries/Lists/VirtualizedList.js | 35 ++++++++++++------------------ 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/Libraries/Lists/VirtualizedList.js b/Libraries/Lists/VirtualizedList.js index 0065fdecc93631..eb8b49025024b5 100644 --- a/Libraries/Lists/VirtualizedList.js +++ b/Libraries/Lists/VirtualizedList.js @@ -592,22 +592,6 @@ class VirtualizedList extends React.PureComponent { this.state = initialState; } - componentDidMount() { - if (this.props.initialScrollIndex) { - this._initialScrollIndexTimeout = setTimeout( - () => - /* $FlowFixMe(>=0.63.0 site=react_native_fb) This comment suppresses - * an error found when Flow v0.63 was deployed. To see the error - * delete this comment and run Flow. */ - this.scrollToIndex({ - animated: false, - index: this.props.initialScrollIndex, - }), - 0, - ); - } - } - componentWillUnmount() { if (this._isNestedWithSameOrientation()) { this.context.virtualizedList.unregisterAsNestedChild({ @@ -625,10 +609,6 @@ class VirtualizedList extends React.PureComponent { tuple.viewabilityHelper.dispose(); }); this._fillRateHelper.deactivateAndFlush(); - /* $FlowFixMe(>=0.63.0 site=react_native_fb) This comment suppresses an - * error found when Flow v0.63 was deployed. To see the error delete this - * comment and run Flow. */ - clearTimeout(this._initialScrollIndexTimeout); } componentWillReceiveProps(newProps: Props) { @@ -954,7 +934,7 @@ class VirtualizedList extends React.PureComponent { _highestMeasuredFrameIndex = 0; _headerLength = 0; _indicesToKeys: Map = new Map(); - _initialScrollIndexTimeout = 0; + _hasDoneInitialScroll = false; _nestedChildLists: Map< string, {ref: ?VirtualizedList, state: ?ChildListState}, @@ -1206,6 +1186,19 @@ class VirtualizedList extends React.PureComponent { } _onContentSizeChange = (width: number, height: number) => { + if ( + width > 0 && + height > 0 && + this.props.initialScrollIndex != null && + this.props.initialScrollIndex > 0 && + !this._hasDoneInitialScroll + ) { + this.scrollToIndex({ + animated: false, + index: this.props.initialScrollIndex, + }); + this._hasDoneInitialScroll = true; + } if (this.props.onContentSizeChange) { this.props.onContentSizeChange(width, height); }