I have an app that has a timer, when timer stops there should be shown a bottomsheet with results, but when the app is in background I got this crash:
java.lang.IllegalStateException: Fragment HealthExamResultBottomSheetFragment{52bc1d1} (b00dde02-255d-4ab4-b759-0d3f8056d273) not associated with a fragment manager.
at androidx.fragment.app.Fragment.getParentFragmentManager(Fragment.java:1112)
at androidx.fragment.app.DialogFragment.dismissInternal(DialogFragment.java:612)
at androidx.fragment.app.DialogFragment.dismissAllowingStateLoss(DialogFragment.java:574)
at com.google.android.material.bottomsheet.BottomSheetDialogFragment.dismissAllowingStateLoss(BottomSheetDialogFragment.java:63)
at co.tenton.admin.autoshkolla.architecture.fragments.health.HealthExamFragment.showHealthResults(HealthExamFragment.kt:214)
at co.tenton.admin.autoshkolla.architecture.fragments.health.HealthExamFragment.openExamResults(HealthExamFragment.kt:200)
at co.tenton.admin.autoshkolla.architecture.fragments.health.HealthExamFragment.access$openExamResults(HealthExamFragment.kt:37)
at co.tenton.admin.autoshkolla.architecture.fragments.health.HealthExamFragment$finishExamDialog$dialog$1.invoke(HealthExamFragment.kt:185)
I guess the problem is that i am calling the dismissAllowingStateLoss()
if(!bottomSheet.isAdded) {
if (!fm.isStateSaved) {
bottomSheet.show(fm, "HealthExamResultBottomSheet")
} else {
fm.registerFragmentLifecycleCallbacks(object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
super.onFragmentResumed(fm, f)
if (f == this@HealthExamFragment) {
fm.unregisterFragmentLifecycleCallbacks(this)
showHealthResults(item)
}
}
}, false)
}
}
val fm = activity?.supportFragmentManager ?: return
healthExamResultBottomSheetFragment?.dismissAllowingStateLoss()
healthExamResultBottomSheetFragment = HealthExamResultBottomSheetFragment(item)
val bottomSheet = healthExamResultBottomSheetFragment ?: return
bottomSheet.isCancelable = false
if(!bottomSheet.isAdded) {
if (!fm.isStateSaved) {
bottomSheet.show(fm, "HealthExamResultBottomSheet")
} else {
fm.registerFragmentLifecycleCallbacks(object : FragmentManager.FragmentLifecycleCallbacks() {
override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
super.onFragmentResumed(fm, f)
if (f == this@HealthExamFragment) {
fm.unregisterFragmentLifecycleCallbacks(this)
showHealthResults(item)
}
}
}, false)
}
}
}