dagger.hilt.android.internal.managers.ViewComponentManager$FragmentContextWrapper 不能转换为 android.app.Activity

Car*_*son 6 android kotlin dagger-hilt

我正在使用具有一些自定义视图实现的第三方库。在实现中,他们调用Utils.showSoftKeyboard(context as Activity). 这与使用片段作为 @AndroidEntryPoint 一起会导致以下异常:

java.lang.ClassCastException: dagger.hilt.android.internal.managers.ViewComponentManager$FragmentContextWrapper cannot be cast to android.app.Activity.

有没有办法在不改变第三方库的情况下解决这个问题?

小智 7

如果第三方库有问题跟踪器,最好提出有关此问题的问题。不能保证contexta 的 aView是 an Activityandroid:theme自定义视图中的属性或任何祖先也很容易引起同样的问题。

如果您没有@AndroidEntryPoint在片段中扩充任何视图,则可以通过LayoutInflater直接从活动上下文中获取 a 来解决此问题。

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val baseInflater = LayoutInflater.from(requireActivity()) // NOT context
        // ...
    }
Run Code Online (Sandbox Code Playgroud)


小智 6

如果没有 Hilt 依赖项,我们可以访问父活动,如下所示

(上下文作为 ContextWrapper).baseContext