gpt4 book ai didi

java - 具有泛型类型的 ViewModel

转载 作者:行者123 更新时间:2023-12-03 10:12:39 25 4
gpt4 key购买 nike

如何创建 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com