Java 注入通用ViewModel匕首柄Android
嗨,我想在我的BaseActivity中注入通用的ViewModel类型,我如何使用匕首柄解决这个问题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
@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我刚刚用我所说的评论更新了我的答案。