From 3150297590e128bdb2d4493af1fbcebdf0382130 Mon Sep 17 00:00:00 2001 From: Sergey Vlasenko Date: Mon, 8 Apr 2024 12:19:28 +0300 Subject: [PATCH] fix crash when ViewControllerFragment is used in ViewPager --- .../fragments/ViewControllerFragment.kt | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/navigation-viewcontroller/src/main/java/ru/touchin/roboswag/navigation_viewcontroller/fragments/ViewControllerFragment.kt b/navigation-viewcontroller/src/main/java/ru/touchin/roboswag/navigation_viewcontroller/fragments/ViewControllerFragment.kt index 053f9a9..496dda0 100644 --- a/navigation-viewcontroller/src/main/java/ru/touchin/roboswag/navigation_viewcontroller/fragments/ViewControllerFragment.kt +++ b/navigation-viewcontroller/src/main/java/ru/touchin/roboswag/navigation_viewcontroller/fragments/ViewControllerFragment.kt @@ -35,6 +35,7 @@ import android.view.animation.Animation import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.lifecycle.Lifecycle +import ru.touchin.roboswag.core.utils.ShouldNotHappenException import ru.touchin.roboswag.navigation_viewcontroller.BuildConfig import ru.touchin.roboswag.navigation_viewcontroller.viewcontrollers.ViewController @@ -80,7 +81,8 @@ open class ViewControllerFragment> private set + var viewControllerClass: Class>? = null + private set private var viewController: ViewController? = null @@ -241,15 +243,19 @@ open class ViewControllerFragment { - if (viewControllerClass.constructors.size != 1) { - throw IllegalStateException("There should be single constructor for $viewControllerClass") - } - val constructor = viewControllerClass.constructors[0] - return when (constructor.parameterTypes.size) { - 1 -> constructor.newInstance(creationContext) - 2 -> constructor.newInstance(creationContext, savedInstanceState) - else -> throw IllegalArgumentException("Wrong constructor parameters count: ${constructor.parameterTypes.size}") - } as ViewController + viewControllerClass + ?.let { mViewControllerClass -> + if (mViewControllerClass.constructors.size != 1) { + throw IllegalStateException("There should be single constructor for $viewControllerClass") + } + val constructor = mViewControllerClass.constructors[0] + return when (constructor.parameterTypes.size) { + 1 -> constructor.newInstance(creationContext) + 2 -> constructor.newInstance(creationContext, savedInstanceState) + else -> throw IllegalArgumentException("Wrong constructor parameters count: ${constructor.parameterTypes.size}") + } as ViewController + } + ?: throw ShouldNotHappenException("viewControllerClass is null") } override fun toString(): String = "${super.toString()} ViewController: $viewControllerClass"