android.view.ContextThemeWrapper无法转换为android.app.Activity

时间:2019-03-11 19:40:22

标签: android dagger-2 dagger

我有一种情况,应该将一个类注入到我的recyclerview中。为了注入我的匕首类,我需要掌握上下文。所以我在recyclerview类中编写了以下代码

 Components.<DepComponent>getFrom(parent.getContext()).inject(this);

DepComponent内,我有一个注入方法,其中还添加了此特定的回收站视图

运行代码时出现此错误

android.view.ContextThemeWrapper cannot be cast to target.dagger.HasComponent

我尝试投射(Activity)parent.getContext(),但抛出以下错误

android.view.ContextThemeWrapper cannot be cast to Activity

有关如何解决此问题的任何建议?看起来parent.getContext()返回的是ContextThemeWrapper,它没有被强制转换为活动

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法从上下文获取活动,或者如果它不是基于Activity的上下文,则抛出异常:

private fun getActivity(context: Context): Activity {
    return when (context) {
        is Activity -> context
        is ContextWrapper -> getActivity(context.getBaseContext())
        else -> error("Non Activity based context")
    }
}

像这样:

Components.<DepComponent>getFrom(getActivity(context)).inject(this);