Skip to content

Commit 9e58a54

Browse files
authored
fix: onTabChange called twice on Android (ptomasroos#1093)
`onPageSelected={this._updateSelectedPage}` ViewPager prop causes onTabChange to be called twice when change tabs without any gesture actions this will fix duplicated tab updates on android #### when user clicked tab buttons `goToPage -> updateSceneKeys(onTabChange) -> Screen Update -> onPageSelected={_updateSelectedPage} -> updateSceneKeys(onTabChange) -> Screen Update` #### when user swiped tab views `Swipe -> onPageSelected={_updateSelectedPage} -> updateSceneKeys(onTabChange) -> Screen Update` #### when user clicked tab buttons with this patch `goToPage -> set tabWillChangeWithoutGesture -> updateSceneKeys(onTabChange) -> Screen Update -> onPageSelected={_updateSelectedPage} -> ignore updateSceneKeys(onTabChange) -> remove tabWillChangeWithoutGesture`
1 parent 1371236 commit 9e58a54

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const ScrollableTabView = createReactClass({
3232
ScrollableTabBar,
3333
},
3434
scrollOnMountCalled: false,
35+
tabWillChangeWithoutGesture: false,
3536

3637
propTypes: {
3738
tabBarPosition: PropTypes.oneOf(['top', 'bottom', 'overlayTop', 'overlayBottom', ]),
@@ -141,6 +142,7 @@ const ScrollableTabView = createReactClass({
141142
}
142143
} else {
143144
if (this.scrollView) {
145+
this.tabWillChangeWithoutGesture = true;
144146
if (this.props.scrollWithoutAnimation) {
145147
this.scrollView.setPageWithoutAnimation(pageNumber);
146148
} else {
@@ -305,10 +307,11 @@ const ScrollableTabView = createReactClass({
305307
}
306308

307309
const currentPage = this.state.currentPage;
308-
this.updateSceneKeys({
310+
!this.tabWillChangeWithoutGesture && this.updateSceneKeys({
309311
page: localNextPage,
310312
callback: this._onChangeTab.bind(this, currentPage, localNextPage),
311313
});
314+
this.tabWillChangeWithoutGesture = false;
312315
},
313316

314317
_onChangeTab(prevPage, currentPage) {

0 commit comments

Comments
 (0)