Hilt ClassCastException:无法将 ViewComponentManager$FragmentContextWrapper 转换为 AppCompatActivity

Hilt ClassCastException: ViewComponentManager$FragmentContextWrapper cannot be cast to AppCompatActivity

我有这段代码,当我在 Adapter 中单击 viewHolder 项目时显示 Dialog Fragment

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

最近我正在迁移到 Hilt,我遇到了 class 转换异常,看起来 Hilt 包装了上下文,我无法获取父级 Activity 获取所需的 FragmentManager 以显示对话框

我可能会通过检查上下文类型并获取 BaseContext 找到解决此崩溃的方法。这是我现在正在使用的。我不知道是否有更好的方法使用 Hilt

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

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

在我的例子中,我的自定义视图在库模块中,即:("com.android.library"),我在我的 App 模块中使用刀柄,即:("com.android.application") 由于为此,我的应用程序崩溃了。因为我在我的应用程序模块中使用了 Hilt 库,并且上下文实例是由 Hilt 库创建的。我找不到 fragmentManger。

因此,作为解决方法,我必须在我的库模块中添加 Hilt,然后我使用以下代码找到 FragmentManger

private FragmentManager getFragmentManager(@NonNull Context mContext) {
        if (mContext instanceof AppCompatActivity) {
            return ((AppCompatActivity) mContext).getSupportFragmentManager();
        } else if (mContext instanceof ContextThemeWrapper) {
            return getFragmentManager(((ContextThemeWrapper) mContext).getBaseContext());
        }
// below if clause is for hilt library
 else if (mContext instanceof ViewComponentManager.FragmentContextWrapper) {
            return getFragmentManager(((ViewComponentManager.FragmentContextWrapper) mContext).getBaseContext());
        }
        return null;
    } 

如果是这种情况希望这对某人有所帮助。

编码愉快。