java - 具有泛型类型的 ViewModel

标签 java android generics mvvm

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

相关文章:

JavaFX - 在高 dpi 的 Canvas 上使用矩形绘制时避免模糊

android - SharedPreferences 未按预期工作

c# - 可以将具有不同泛型类型的对象添加到单个容器中吗

android - 将动画 .GIF 设置为背景 Android

android - Android 3.0 Honeycomb Preview AVD 模拟器中的 MapView?

c# - 为什么我们不能使用密封类作为通用约束?

java - 在泛型类中创建泛型方法名称?

java - JKS 文件是否独立于创建它的计算机?

java - 如何在类之间共享类常量?

java - 当我在 Java 中只有一个对象的引用时,如何将一个对象分配给另一个对象?