From e54046a428f3eafc6eac48c939a2b33e67739ded Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Tue, 28 Oct 2025 10:50:52 +0100 Subject: [PATCH 1/2] don't change menu item on user tap --- .../swmansion/rnscreens/gamma/tabs/TabsHost.kt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt index ca1dfe7a54..a047c6ceab 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt @@ -134,6 +134,10 @@ class TabsHost( private var interfaceInsetsChangeListener: SafeAreaView? = null + // We need to differentiate between user tapping the menu item + // and update requested from JS. + private var menuItemSelectedViaContainerUpdate = false + private val appearanceCoordinator = TabsHostAppearanceCoordinator(wrappedContext, bottomNavigationView, tabScreenFragments) @@ -221,7 +225,12 @@ class TabsHost( val fragment = getFragmentForMenuItemId(item.itemId) val tabKey = fragment?.tabScreen?.tabKey ?: "undefined" eventEmitter.emitOnNativeFocusChange(tabKey) - true + if (menuItemSelectedViaContainerUpdate) { + menuItemSelectedViaContainerUpdate = false + true + } else { + false + } } } @@ -317,9 +326,6 @@ class TabsHost( appearanceCoordinator.updateTabAppearance(this) - bottomNavigationView.selectedItemId = - checkNotNull(getSelectedTabScreenFragmentId()) { "[RNScreens] A single selected tab must be present" } - post { refreshLayout() RNSLog.d(TAG, "BottomNavigationView request layout") @@ -337,6 +343,10 @@ class TabsHost( return } + menuItemSelectedViaContainerUpdate = true + bottomNavigationView.selectedItemId = + checkNotNull(getSelectedTabScreenFragmentId()) { "[RNScreens] A single selected tab must be present" } + requireFragmentManager .beginTransaction() .setReorderingAllowed(true) From 4552703aa45d52f2347f6cb8edde8242f994974a Mon Sep 17 00:00:00 2001 From: Krzysztof Ligarski Date: Tue, 28 Oct 2025 11:12:26 +0100 Subject: [PATCH 2/2] move selected item id update back --- .../java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt index a047c6ceab..70fe9f2d48 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabsHost.kt @@ -326,6 +326,10 @@ class TabsHost( appearanceCoordinator.updateTabAppearance(this) + menuItemSelectedViaContainerUpdate = true + bottomNavigationView.selectedItemId = + checkNotNull(getSelectedTabScreenFragmentId()) { "[RNScreens] A single selected tab must be present" } + post { refreshLayout() RNSLog.d(TAG, "BottomNavigationView request layout") @@ -343,10 +347,6 @@ class TabsHost( return } - menuItemSelectedViaContainerUpdate = true - bottomNavigationView.selectedItemId = - checkNotNull(getSelectedTabScreenFragmentId()) { "[RNScreens] A single selected tab must be present" } - requireFragmentManager .beginTransaction() .setReorderingAllowed(true)