Android架构组件:如何插入存储库参数

Sas*_*ang 4 android android-architecture-components

在viewmodel类中,我看到了构造函数将存储库作为参数接受的示例代码.像这样:

public SampleViewModel(SampleRepository sampleRepository){ ... }

但是在活动中,您使用此行来创建viewmodel类ViewModelProviders.of(this).get(SampleViewModel.class).如何将存储库作为参数传递给viewmodel?我也提到了"依赖注入".作为一个缺乏经验的程序员,任何人都可以建议如果DI与我的问题有关吗?

Ent*_*eco 6

获取viewmodel时,必须提供ViewModelProvider.Factory.

ViewModelProviders.of(this, new SampleViewModelFactory(sampleRepo)).get(SampleViewModel.class)
Run Code Online (Sandbox Code Playgroud)

这是一个示例:

class SampleViewModelFactory implements ViewModelProvider.Factory {

    private final SampleRepository repo;

    @Inject
    public SampleViewModelFactory(SampleRepository repo) {
       this.repo = repo;
    }

    @Override
    public SampleViewModel create(Class modelClass) {
        return new SampleViewModel(repo);
    }
}
Run Code Online (Sandbox Code Playgroud)