如何创建 viewModel
使用泛型类型?让我给你看一个例子:
查看型号
public class MyViewModel<T> extends ViewModel
{
private Repository<T> repository;
...
@Override
public LiveData<Model<T>> getModel()
{
return repository.getModel();
}
}
fragment
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);
}
如您所见,我无法获得我在 fragment 中初始化为变量的特定 View 模型也许有人可以引导我朝着正确的方向前进,谢谢。
最佳答案
我知道很久以前就问过这个问题,但是对于其他有同样问题的人,您应该使用工厂类将自己的构造函数发送到 View 模型类(在 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
}
}
并在 Activity 或 fragment 中声明您的 View 模型,如下所示:val viewmodel=ViewModelProvider(this, BaseViewModelFactory<K1, K2>())
.get(BaseViewModel::class.java) as BaseViewModel<K1, K2>
关于java - 具有泛型类型的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52225677/