Reputation: 728
I have a bottom sheet which I inflate to display a restaurant product detailed information.
class ProductItemInfo(private val product: Product) : BottomSheetDialogFragment() {
private var _binding: DialogProductInfoBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = DialogProductInfoBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.apply {
productName.text = product.name
productPrice.text = String.format("Rs %s", product.totalPrice)
productCategory.text=product.category
productDescription.text=product.category
productImage.load(product.image)
}
}
override fun getTheme(): Int {
return R.style.CustomBottomSheetDialogTheme
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
I inflate this bottom sheet dialog from a fragment.
val dialogProductInfoBinding = ProductItemInfo(it)
dialogProductInfoBinding.show(childFragmentManager, null)
The problem is when I open the bottom sheet and then drag my notification shade to toggle the dark theme, my application crashes. I have no idea why is it happening.
Here is the error log
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ass.cafeburp.dine, PID: 18522
java.lang.RuntimeException: Unable to start activity ComponentInfo{ass.cafeburp.dine/ass.cafeburp.dine.presentation.MainActivity}: android.view.InflateException: Binary XML file line #22 in ass.cafeburp.dine:layout/activity_main: Binary XML file line #9 in ass.cafeburp.dine:layout/content_main: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4035)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4201)
at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:6347)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:6212)
at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:71)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2438)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8663)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: android.view.InflateException: Binary XML file line #22 in ass.cafeburp.dine:layout/activity_main: Binary XML file line #9 in ass.cafeburp.dine:layout/content_main: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #9 in ass.cafeburp.dine:layout/content_main: Error inflating class fragment
Caused by: androidx.fragment.app.Fragment$InstantiationException: Unable to instantiate fragment ass.cafeburp.dine.presentation.dialogs.ProductItemInfo: could not find Fragment constructor
at androidx.fragment.app.Fragment.instantiate(Fragment.java:678)
at androidx.fragment.app.FragmentContainer.instantiate(FragmentContainer.java:57)
at androidx.fragment.app.FragmentManager$3.instantiate(FragmentManager.java:498)
at androidx.fragment.app.FragmentState.instantiate(FragmentState.java:81)
at androidx.fragment.app.FragmentStateManager.<init>(FragmentStateManager.java:85)
at androidx.fragment.app.FragmentManager.restoreSaveStateInternal(FragmentManager.java:2496)
at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1989)
at androidx.fragment.app.Fragment.onCreate(Fragment.java:1965)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:3090)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:257)
at androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:113)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1424)
at androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:2968)
at androidx.fragment.app.FragmentManager.dispatchCreate(FragmentManager.java:2875)
at androidx.fragment.app.Fragment.restoreChildFragmentState(Fragment.java:1990)
at androidx.fragment.app.Fragment.onCreate(Fragment.java:1965)
at androidx.navigation.fragment.NavHostFragment.onCreate(NavHostFragment.kt:169)
at androidx.fragment.app.Fragment.performCreate(Fragment.java:3090)
at androidx.fragment.app.FragmentStateManager.create(FragmentStateManager.java:475)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:257)
at androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView(FragmentLayoutInflaterFactory.java:142)
at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:136)
E/AndroidRuntime: at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:248)
at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:227)
at android.view.LayoutInflater.tryCreateView(LayoutInflater.java:1073)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1001)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:965)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1127)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:1267)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1088)
at android.view.LayoutInflater.inflate(LayoutInflater.java:686)
at android.view.LayoutInflater.inflate(LayoutInflater.java:538)
at ass.cafeburp.dine.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:49)
at ass.cafeburp.dine.databinding.ActivityMainBinding.inflate(ActivityMainBinding.java:43)
at ass.cafeburp.dine.presentation.MainActivity.onCreate(MainActivity.kt:28)
at android.app.Activity.performCreate(Activity.java:8290)
at android.app.Activity.performCreate(Activity.java:8270)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:4009)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4201)
at android.app.ActivityThread.handleRelaunchActivityInner(ActivityThread.java:6347)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:6212)
at android.app.servertransaction.ActivityRelaunchItem.execute(ActivityRelaunchItem.java:71)
at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2438)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:226)
at android.os.Looper.loop(Looper.java:313)
at android.app.ActivityThread.main(ActivityThread.java:8663)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:567)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1135)
Caused by: java.lang.NoSuchMethodException: ass.cafeburp.dine.presentation.dialogs.ProductItemInfo.<init> []
at java.lang.Class.getConstructor0(Class.java:2363)
at java.lang.Class.getConstructor(Class.java:1759)
at androidx.fragment.app.Fragment.instantiate(Fragment.java:663)
... 56 more
Upvotes: 0
Views: 734
Reputation: 11
I have faced the same issue earlier...
The solution that worked for me is...
this.dismiss()
this is my constructor
class BottomSheetFragment(
private val matchDetailsList: List<Matchlist_Model> = emptyList() ,
private val matchPosition: Int = -1
) : BottomSheetDialogFragment() {}
And calling dismiss() like below.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if ((matchPosition == -1) or matchDetailsList.isEmpty()){
this.dismiss()
}
}
Upvotes: 1