Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Add fix for crash on folding-unfolding app -- wrap attaching and deta…
…ching of fragments with Handler().post {}
  • Loading branch information
PStrelchenko committed Aug 15, 2020
1 parent e9c150f commit 41bd28c
Showing 1 changed file with 27 additions and 15 deletions.
@@ -1,6 +1,7 @@
package com.aaglobal.jnc_playground.extensions

import android.content.Intent
import android.os.Handler
import android.util.SparseArray
import androidx.core.util.forEach
import androidx.core.util.set
Expand Down Expand Up @@ -77,8 +78,10 @@ fun BottomNavigationView.setupWithNavController(
val newlySelectedItemTag = graphIdToTagMap[item.itemId]
if (selectedItemTag != newlySelectedItemTag) {
// Pop everything above the first fragment (the "fixed start destination")
fragmentManager.popBackStack(firstFragmentTag,
FragmentManager.POP_BACK_STACK_INCLUSIVE)
fragmentManager.popBackStack(
firstFragmentTag,
FragmentManager.POP_BACK_STACK_INCLUSIVE
)
val selectedFragment = fragmentManager.findFragmentByTag(newlySelectedItemTag)
as NavHostFragment

Expand All @@ -91,7 +94,8 @@ fun BottomNavigationView.setupWithNavController(
R.anim.nav_default_enter_anim,
R.anim.nav_default_exit_anim,
R.anim.nav_default_pop_enter_anim,
R.anim.nav_default_pop_exit_anim)
R.anim.nav_default_pop_exit_anim
)
.attach(selectedFragment)
.setPrimaryNavigationFragment(selectedFragment)
.apply {
Expand Down Expand Up @@ -157,7 +161,8 @@ private fun BottomNavigationView.setupDeepLinks(
)
// Handle Intent
if (navHostFragment.navController.handleDeepLink(intent)
&& selectedItemId != navHostFragment.navController.graph.id) {
&& selectedItemId != navHostFragment.navController.graph.id
) {
this.selectedItemId = navHostFragment.navController.graph.id
}
}
Expand All @@ -183,25 +188,32 @@ private fun detachNavHostFragment(
fragmentManager: FragmentManager,
navHostFragment: NavHostFragment
) {
fragmentManager.beginTransaction()
.detach(navHostFragment)
.commitNow()
// Fix for crash on folding-unfolding app
// java.lang.IllegalStateException: FragmentManager is already executing transactions
Handler().post {
fragmentManager.beginTransaction()
.detach(navHostFragment)
.commitNow()
}
}

private fun attachNavHostFragment(
fragmentManager: FragmentManager,
navHostFragment: NavHostFragment,
isPrimaryNavFragment: Boolean
) {
fragmentManager.beginTransaction()
.attach(navHostFragment)
.apply {
if (isPrimaryNavFragment) {
setPrimaryNavigationFragment(navHostFragment)
// Fix for crash on folding-unfolding app
// java.lang.IllegalStateException: FragmentManager is already executing transactions
Handler().post {
fragmentManager.beginTransaction()
.attach(navHostFragment)
.apply {
if (isPrimaryNavFragment) {
setPrimaryNavigationFragment(navHostFragment)
}
}
}
.commitNow()

.commitNow()
}
}

private fun obtainNavHostFragment(
Expand Down

0 comments on commit 41bd28c

Please sign in to comment.