android Hilt ClassCastException:无法将ViewIntent Manager $FragmentContextWrapper强制转换为AppCompatActivity

bis0qfac  于 2024-01-04  发布在  Android
关注(0)|答案(3)|浏览(228)

我有这样一段代码,当我在适配器中单击viewHolder项时,

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

字符串
最近我迁移到Hilt,我得到了类强制转换异常,看起来像Hilt Package 上下文,我不能让父Activity获得所需的FragmentManager来显示对话框

2j4z5cfb

2j4z5cfb1#

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

lqfhib0f

lqfhib0f2#

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

  1. private fun activityContext(): Context? {
  2. val context = itemView.context
  3. return if (context is ViewComponentManager.FragmentContextWrapper) {
  4. context.baseContext
  5. } else context
  6. }

字符串

6xfqseft

6xfqseft3#

在我的例子中,我的自定义视图是在库模块中,即:(“com.android.library”),我在我的应用程序模块中使用hilt,即:(“com.android.application”)由于这个原因,我的应用程序崩溃了。因为我在我的应用程序模块中使用了Hilt库,上下文示例是由Hilt库创建的。我找不到fragmentManger。
因此,作为一种变通方法,我必须在我的库模块中添加Hilt,然后使用以下代码查找FragmentManger

  1. private FragmentManager getFragmentManager(@NonNull Context mContext) {
  2. if (mContext instanceof AppCompatActivity) {
  3. return ((AppCompatActivity) mContext).getSupportFragmentManager();
  4. } else if (mContext instanceof ContextThemeWrapper) {
  5. return getFragmentManager(((ContextThemeWrapper) mContext).getBaseContext());
  6. }
  7. // below if clause is for hilt library
  8. else if (mContext instanceof ViewComponentManager.FragmentContextWrapper) {
  9. return getFragmentManager(((ViewComponentManager.FragmentContextWrapper) mContext).getBaseContext());
  10. }
  11. return null;
  12. }

字符串

展开查看全部

相关问题