【问题标题】:How to inject SharedViewModel using dagger?如何使用匕首注入 SharedViewModel?
【发布时间】:2018-09-26 06:36:06
【问题描述】:

我在 Activity 中创建 SharedViewModel :

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

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

 mOrdersViewModel = ViewModelProviders.of(Objects.requireNonNull(getActivity())).get(OrdersViewModel.class); 

但我想使用mOrdersViewModel 所以@Inject OrdersViewModel;

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

【问题讨论】:

    标签: android


    【解决方案1】:

    在您的 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.
    }
    

    【讨论】:

    • 如果您仍有任何疑问,请告诉我。
    • 非常感谢!我花了很多时间寻找答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    相关资源
    最近更新 更多