#android #dagger-2 #dagger
#Android #dagger-2 #dagger
Вопрос:
У меня есть сценарий, в котором я должен внедрить класс в свой recyclerview. Чтобы внедрить мой класс dagger, мне нужно получить доступ к context . поэтому я написал следующий код в моем классе recyclerview
Components.<DepComponent>getFrom(parent.getContext()).inject(this);
Внутри DepComponent
у меня есть метод inject, в котором также добавляется этот конкретный вид recycler
Когда я запускаю код, я получаю эту ошибку
android.view.ContextThemeWrapper cannot be cast to target.dagger.HasComponent
Я пытался выполнить приведение (Activity)parent.getContext()
, но выдается следующая ошибка
android.view.ContextThemeWrapper cannot be cast to Activity
Есть предложения о том, как это решить? Похоже, parent.getContext() возвращает ContextThemeWrapper
который не преобразуется в activity
Комментарии:
1. Что конкретно
getFrom
используется в качестве параметра?2. Активность или фрагментактивность
3.
ContextThemeWrapper
это оболочка, необходимая для получения обернутого контекста с помощьюgetBaseContext
— developer.android.com/reference/android/content /…4. ты имеешь в виду
parent.getContext().getBaseContext()
? . если это так, существует метод типа`getBaseContext()` противparent.getContext()
5. Смотрите мой ответ о том, как это можно сделать.
Ответ №1:
Вы можете использовать следующий метод для получения activity из контекста или throw and exception, если это контекст, не основанный на 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);
Комментарии:
1.
getBaseContext()
будет работать, только если контекст задан конструктором илиsetBaseContext
.чего не происходит в моем случае2. Как вы получаете свой контекст? Мне нужно увидеть больше кода, чтобы иметь возможность помочь.