android.view.ContextThemeWrapper не может быть преобразован в android.app.Activity

#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. Как вы получаете свой контекст? Мне нужно увидеть больше кода, чтобы иметь возможность помочь.