【发布时间】:2018-08-16 11:45:39
【问题描述】:
我按照this 指南进行操作,做得很好,我不得不为我的 ViewModel 类使用自定义构造函数(这引发了运行时崩溃...UserViewModel> has no zero argument constructor)
所以,我尝试了什么:
首先我搜索了一下,发现我需要一个我自己的Factoryimplemented..
@Singleton
public class ViewModelFactory implements ViewModelProvider.Factory {
private final Map<Class<? extends ViewModel>, Provider<ViewModel>> creators;
@Inject
public ViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
this.creators = creators;
}
@NonNull
@SuppressWarnings("unchecked")
@Override
public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
Provider<? extends ViewModel> creator = creators.get(modelClass);
if (creator == null) {
for (Map.Entry<Class<? extends ViewModel>, Provider<ViewModel>> entry : creators.entrySet()) {
if (modelClass.isAssignableFrom(entry.getKey())) {
creator = entry.getValue();
break;
}
}
}
if (creator == null) {
throw new IllegalArgumentException("unknown model class " + modelClass);
}
try {
return (T) creator.get();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Module
abstract class ViewModelFactoryModule {
@Binds
@IntoMap
@ViewModelKey(UserViewModel.class)
abstract ViewModel bindUserViewModel(UserViewModel userViewModel);
@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(ViewModelFactory viewModelFactory);
}
}
这样做了,但我无法通过
获取我的ViewModelinstance
ViewModelProviders.of(this, viewModelFactory).get(UserViewModel.class)
ViewModel 类的构造函数
@Inject
public UserViewModel(UserRepository userRepository){
this.userRepository = userRepository;
}
我还能做什么?我知道有一些关于它的话题,我查了一下,没有任何成功。我真的错过了什么吗?
【问题讨论】:
-
yet I can't get my ViewModelinstance您能说明您遇到的错误吗?您的设置一目了然 -
我确实说明了错误。这可能是一个匕首配置问题,我认为它没有正确注入对象