ale*_*pfx 5 android dagger dagger-2 android-architecture-components
我有一个名为的ViewModel RecipesViewModel.通常,我这样实例化:
RecipesViewModel viewModel = ViewModelProviders.of(this, new ViewModelProvider.Factory() {
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
return (T) new RecipesViewModel(recipesRepository);
}
}).get(RecipesViewModel.class);
Run Code Online (Sandbox Code Playgroud)
但是现在我正在使用dagger2,所以我@Inject在这个ViewModel的构造函数上添加了一个注释,所以我可以使用字段注入器将它直接注入到我的片段中.
我的问题是:我是否以这种方式失去了以某种方式启动视图模型的东西ViewModelProviders.of?我的ViewModel已经被Scoped,因此在上下文中只创建一个实例.
其他选项是仅将工厂实例化移动到dagger2模块,但如果没有问题,我更喜欢第一个方法.
- 编辑 -
阅读文档android.arch.lifecycle.ViewModel,我有点害怕.使用ViewModelProviders.of提供Scope(片段或活动).如果我直接实例化它将是什么范围?
ViewModel是一个负责准备和管理Activity或Fragment数据的类.它还处理Activity/Fragment与应用程序其余部分的通信(例如,调用业务逻辑类).
始终与范围(片段或活动)关联创建ViewModel,并且只要范围处于活动状态,就会保留ViewModel.例如,如果它是一个活动,直到它完成.
换句话说,这意味着如果ViewModel的所有者因配置更改(例如旋转)而被销毁,则不会销毁它.所有者的新实例将重新连接到现有的ViewModel.
- /编辑 -
RecipesViewModel代码如下所示:
@PerActivity
public class RecipesViewModel extends ViewModel {
private static final String TAG = "RecipesViewModel";
private final RecipesRepository recipesRepository;
private LiveData<List<Recipe>> recipes = null;
@Inject
public RecipesViewModel(RecipesRepository recipesRepository) {
this.recipesRepository = recipesRepository;
}
public final void loadAll() {
recipes = recipesRepository.getRecipes();
}
public LiveData<List<Recipe>> getRecipes() {
return recipes;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1764 次 |
| 最近记录: |