From b45e6f81662ea5bf624479689ec453ab9e162ed2 Mon Sep 17 00:00:00 2001 From: Krunal Patel Date: Sun, 20 Nov 2022 16:45:14 +0530 Subject: [PATCH] Fix duplicate entries in backstack Set empty listener to `setOnItemReselectedListener` to prevent repeated click Check the backstack before navigating to a new destination using bottom navigation --- .../github/libretube/ui/activities/MainActivity.kt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt index a3c6f7cf1..b1340d014 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt @@ -105,6 +105,10 @@ class MainActivity : BaseActivity() { binding.bottomNav.setOnApplyWindowInsetsListener(null) + // Prevent adding duplicate entries into backstack on multiple + // click on bottom navigation item + binding.bottomNav.setOnItemReselectedListener { } + binding.bottomNav.setOnItemSelectedListener { // clear backstack if it's the start fragment if (startFragmentId == it.itemId) navController.backQueue.clear() @@ -115,8 +119,11 @@ class MainActivity : BaseActivity() { removeSearchFocus() - // navigate to the selected fragment - navController.navigate(it.itemId) + // navigate to the selected fragment, if the fragment already + // exists in backstack then pop up to that entry + if (!navController.popBackStack(it.itemId, false)) { + navController.navigate(it.itemId) + } false }