如何使用匕首注入SharedViewModel?

时间:2018-09-26 06:36:06

标签: android

我在Activity中创建了SharedViewModel

textscan

之后,我在其他组件(片段)中订阅了LiveData

 mOrdersViewModel=ViewModelProviders.of(this,viewModelFactory.get(OrdersViewModel.class);

但是我想使用 mOrdersViewModel = ViewModelProviders.of(Objects.requireNonNull(getActivity())).get(OrdersViewModel.class); ,所以mOrdersViewModel

如何注入我的mOrdersViewModel。请帮助我(。

1 个答案:

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