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;
}
如果是这种情况希望这对某人有所帮助。
编码愉快。
我有这段代码,当我在 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;
}
如果是这种情况希望这对某人有所帮助。
编码愉快。