Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 注入通用ViewModel匕首柄Android_Java_Android_Kotlin_Dagger 2_Dagger Hilt - Fatal编程技术网

Java 注入通用ViewModel匕首柄Android

Java 注入通用ViewModel匕首柄Android,java,android,kotlin,dagger-2,dagger-hilt,Java,Android,Kotlin,Dagger 2,Dagger Hilt,嗨,我想在我的BaseActivity中注入通用的ViewModel类型,我如何使用匕首柄解决这个问题 @AndroidEntryPoint abstract class BaseActivity<VM: BaseViewModel> : AppCompatActivity() { @Inject lateinit var viewModel: VM } @AndroidEntryPoint 抽象类BaseActivity:AppCompatActivity(){ @注入 l

嗨,我想在我的BaseActivity中注入通用的ViewModel类型,我如何使用匕首柄解决这个问题

@AndroidEntryPoint
 abstract class BaseActivity<VM: BaseViewModel> : AppCompatActivity() {

@Inject
lateinit var viewModel: VM

}
@AndroidEntryPoint
抽象类BaseActivity:AppCompatActivity(){
@注入
lateinit var viewModel:VM
}
更新1 以下是希尔特团队的回复:

所以@ViewModelInject是一种单向的东西,在某种程度上类似于@AndroIdentityPoint。它只会将匕首依赖项带入类中。它不会将ViewModel作为匕首绑定添加到对象图中。为了在提供者或其他地方访问您的ViewModel,您仍然需要像使用ViewModelProvider一样通过正常的Android API获取视图模型

我们无法将其提供到图形中的原因是,我们不知道您希望将其用于哪个ViewModelStoreOwner

你可以找到这个评论


原始答案 几天前我就想这么做,我想我在网上的某个地方读到希尔特不可能这么做(我现在还找不到链接)

通常在Java中,我们创建的ViewModel如下所示:

MyViewModel model=newviewmodelprovider(this.get)(MyViewModel.class);
我们需要在
ViewModelProvider
constructor中提供,我了解到hilt无法知道要为哪个
ViewModelStoreOwner
创建
MyViewModel

因此,我们将继续以旧的方式创建视图模型,在Kotlin,您将坚持这样做:

@AndroidEntryPoint
抽象类BaseActivity:AppCompatActivity(){
private val viewModel:MyViewModel by viewModels()
}

一旦我发现希尔特团队的评论提到了这一点,我会在这里更新答案。

感谢@Ahmed更新我的答案,一旦你在网站上找到了什么,一定要更新你的答案it@SahilShokeen我刚刚用我所说的评论更新了我的答案。