From 88e0eb882b0909ec8f0717e63edc87ddbc6b41cf Mon Sep 17 00:00:00 2001 From: EricKuck Date: Tue, 5 Jul 2022 10:43:52 -0500 Subject: [PATCH] Fix crash when a parent is transitioned out before a child can create its view --- .../OwnViewTreeLifecycleAndRegistry.kt | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/conductor/src/main/java/com/bluelinelabs/conductor/internal/OwnViewTreeLifecycleAndRegistry.kt b/conductor/src/main/java/com/bluelinelabs/conductor/internal/OwnViewTreeLifecycleAndRegistry.kt index 36abacd..74daf55 100644 --- a/conductor/src/main/java/com/bluelinelabs/conductor/internal/OwnViewTreeLifecycleAndRegistry.kt +++ b/conductor/src/main/java/com/bluelinelabs/conductor/internal/OwnViewTreeLifecycleAndRegistry.kt @@ -125,8 +125,7 @@ internal class OwnViewTreeLifecycleAndRegistry private constructor( override fun preDestroyView(controller: Controller, view: View) { if (controller.isBeingDestroyed && controller.router.backstackSize == 0) { val parent = view.parent as? View - parent?.addOnAttachStateChangeListener(object : - View.OnAttachStateChangeListener { + parent?.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener { override fun onViewAttachedToWindow(v: View?) = Unit override fun onViewDetachedFromWindow(v: View?) { parent.removeOnAttachStateChangeListener(this) @@ -160,12 +159,16 @@ internal class OwnViewTreeLifecycleAndRegistry private constructor( changeHandler: ControllerChangeHandler, changeType: ControllerChangeType ) { - pauseOnChangeStart( - targetController = parent, - changeController = controller, - changeHandler = changeHandler, - changeType = changeType, - ) + // No-op on the case where we (the child controller) hasn't yet created a View as our parent is being + // changed out. + if (::lifecycleRegistry.isInitialized) { + pauseOnChangeStart( + targetController = parent, + changeController = controller, + changeHandler = changeHandler, + changeType = changeType, + ) + } } }