由于某种原因,我正在与 hiltViewModel 作斗争。我发了很多类似的帖子,但没有成功,我慢慢地感到沮丧,也许你会发现我监督过的东西。
当我想使用刀柄注入 ViewModel 但我不明白为什么时,麻烦就开始了......
这是我的部门:
plugins {
id("kotlin-kapt")
id("com.google.dagger.hilt.android") version "2.47" apply false
}
buildscript {
dependencies {
classpath("com.google.dagger:hilt-android-gradle-plugin:2.48")
}
}
dependencies{
//Dagger Hilt - dependency injection
implementation("com.google.dagger:hilt-android:2.48")
implementation("androidx.hilt:hilt-navigation-compose:1.1.0-alpha01")
kapt("com.google.dagger:hilt-compiler:2.48")
kapt("com.google.dagger:hilt-android-compiler:2.48")
runtimeOnly("androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03")
//general
...
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2")
}
然后我创建应用程序:
@HiltAndroidApp
class MyApp : Application() {
}
并在AndroidManifest中实现
...
<application
android:name=".MyApp"
...
这是主要活动:
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val navController = rememberNavController();
MyAppTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
NavHost(navController = navController, startDestination = "home") {
composable("home") {
MyView()
}
}
}
}
}
}
}
这就是视图模型:
@HiltViewModel
class MyViewModel @Inject constructor(
) : ViewModel() {
...
}
这就是它崩溃的地方:
@Composable
fun MyView(
viewModel: MyViewModel = hiltViewModel()
) {
...
}
我得到的错误是:
java.lang.IllegalStateException: Given component holder class com.example.MainActivity does not implement interface dagger.hilt.internal.GeneratedComponent or interface dagger.hilt.internal.GeneratedComponentManager
我不明白为什么。有什么想法吗?
提前谢谢您!
@更新 我发现这有效:
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val navController = rememberNavController();
MyAppTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
IncomeView()
}
}
}
}
}
那么为什么这会引发这个错误:
NavHost(navController = navController, startDestination = "home") {
composable("home") {
MyView()
}
}
没有 NavHost 不行吗?
我也遇到过类似的问题。我忘记在清单中声明应用程序名称,现在它工作正常。
<application
android:name=".HiltApplication"