Android TV模块中Hilt下BrowseSupportFragment获取ViewModel报错
Android TV中BrowseSupportFragment使用Hilt获取ViewModel报错解决方法
问题场景
在Android TV模块开发中,继承BrowseSupportFragment的MainFragment通过viewModels()获取Hilt注入的MyViewModel时,出现红色高亮报错。相关配置及代码如下:
模块依赖(build.gradle(Module:tv))
dependencies { // hilt implementation 'com.google.dagger:hilt-android:2.44' kapt 'com.google.dagger:hilt-android-compiler:2.44' implementation 'com.google.code.gson:gson:2.9.0' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.leanback:leanback:1.0.0' implementation 'com.github.bumptech.glide:glide:4.11.0' }
MainFragment代码
@AndroidEntryPoint class MainFragment : BrowseSupportFragment() { private val viewModel: MyViewModel by viewModels() ... }
MyViewModel代码
@HiltViewModel class MyViewModel @Inject constructor( private val usecase: CategoryUseCase ) : ViewModel() { ... }
解决步骤
1. 补充Hilt ViewModel相关依赖
默认Hilt核心依赖不包含ViewModel扩展支持,需添加专门的依赖到模块build.gradle:
dependencies { // 保留原有依赖,新增以下两行 implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03' kapt 'androidx.hilt:hilt-compiler:1.0.0-alpha03' }
2. 配置Hilt全局入口
确保Application类添加@HiltAndroidApp注解,这是Hilt初始化的必要条件:
@HiltAndroidApp class TvApplication : Application() { // 可添加自定义初始化逻辑 }
同时在AndroidManifest.xml中指定该Application:
<application android:name=".TvApplication" <!-- 其他配置项 --> > <!-- 组件声明 --> </application>
3. 使用Hilt提供的ViewModel扩展函数
默认viewModels()不支持Hilt注入,需替换为Hilt提供的hiltViewModels():
// 导入正确的扩展函数 import androidx.hilt.navigation.fragment.hiltViewModels @AndroidEntryPoint class MainFragment : BrowseSupportFragment() { private val viewModel: MyViewModel by hiltViewModels() ... }
4. 清理缓存并重新构建
执行以下操作消除缓存导致的编译问题:
- 点击Android Studio菜单栏
Build -> Clean Project - 随后执行
Build -> Rebuild Project - 或使用Gradle命令:
./gradlew clean :tv:build
完成以上步骤后,viewModels()的红色高亮报错应消失,ViewModel可正常通过Hilt注入。
内容的提问来源于stack exchange,提问作者Dmitry Sergienko
相关产品推荐
相关产品推荐

