我在Activity中创建了SharedViewModel
textscan
之后,我在其他组件(片段)中订阅了LiveData
mOrdersViewModel=ViewModelProviders.of(this,viewModelFactory.get(OrdersViewModel.class);
但是我想使用 mOrdersViewModel = ViewModelProviders.of(Objects.requireNonNull(getActivity())).get(OrdersViewModel.class);
,所以mOrdersViewModel
如何注入我的mOrdersViewModel。请帮助我(。
答案 0 :(得分:2)
在您的 Component
上,像这样注入您的活动:
void inject(Activity activity);
并在您的 Module
中为您的 ViewModel
提供这种依赖性:
public Module(Activity activity) {
this.mActivity = activity;
}
@Provides
YourViewModel provideViewModel(YourViewModel viewModel){
return ViewModelProviders.of(mActivity).get(viewModel.getClass());
}
用法:
在这样的活动中,
@Inject YourViewModel mViewModel; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { Component mActivityComponent = DaggerActivityComponent.builder() .activityModule(new Module(this)) .build(); // then mActivityComponent.inject(this); // Now you can use your viewModel object in activity anywhere. }