引发ClassCastException:无法将ViewComponentManager $ FragmentContextWrapper强制转换为AppCompatActivity

问题描述

我有这段代码,在单击适配器中的viewHolder项时显示对话框片段

 SpecialRequestNotFoundBottomSheetDialog {
            requestItem?.specialRequestEntity?.id?.let { id -> onCancelReasonsSelected(id,it) }
        }.show(itemView.context as AppCompatActivity).supportFragmentManager)

最近我正在迁移到Hilt,并且遇到了类强制转换异常,看起来像Hilt包裹了上下文,但我无法获取 Activity 获取所需的 FragmentManager >显示对话框

解决方法

通过检查Context类型并获取BaseContext,我可能找到了解决此崩溃的方法。这是我现在正在使用的。我不知道击键是否有更好的方法。

private fun activityContext(): Context? {
    val context = itemView.context
    return if (context is ViewComponentManager.FragmentContextWrapper) {
        context.baseContext
    } else context
}
,

我阅读了源代码,找到了此解决方案FragmentComponentManager.findActivity(view.context) as Activity