如何创建具有通用类型的viewModel
?让我给你看一个例子:
ViewModel
public class MyViewModel<T> extends ViewModel
{
private Repository<T> repository;
...
@Override
public LiveData<Model<T>> getModel()
{
return repository.getModel();
}
}
片段
private MyViewModel<T> viewModel;
...
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
// this is where i need my viewModel with the generic type
viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
}
如您所见,我无法获得片段中初始化为变量的分隔的viewModel,也许有人可以引导我朝正确的方向前进,谢谢。
答案 0 :(得分:0)
我知道很久以前就问过这个问题,但是对于其他有相同问题的人,您应该使用工厂类将自己的构造函数发送到视图模型类(在Kotlin代码中):
//Your view model
class BaseViewModel<K1, K2> : ViewModel() {
}
扩展ViewModelProvider.Factory的工厂类:
class BaseViewModelFactory<K1,K2>:ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return BaseViewModel<K1,K2>() as T
}
}
并在活动或片段中声明您的视图模型,如下所示:
val viewmodel=ViewModelProvider(this, BaseViewModelFactory<K1, K2>())
.get(BaseViewModel::class.java) as BaseViewModel<K1, K2>