具有通用类型的ViewModel

时间:2018-09-07 15:32:13

标签: java android generics mvvm

如何创建具有通用类型的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,也许有人可以引导我朝正确的方向前进,谢谢。

1 个答案:

答案 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>