Java Android dagger2使用Factory将意图注入viewModel

Java Android dagger2使用Factory将意图注入viewModel,java,android,dagger-2,android-architecture-components,android-viewmodel,Java,Android,Dagger 2,Android Architecture Components,Android Viewmodel,作为一个例子,我正在使用Google示例-(我使用java版本,可以找到) 我们希望实现的目标: 带着额外的意图开始活动 向viewModel构造函数中注入额外的 我的活动(在我想通过的地方)模块: @模块 公共抽象类AddEditTaskModule{ @提供 @可空 静态字符串ProvideTaskKid(AddEditTaskActivity活动){ 返回activity.getIntent().getStringExtra(AddEditTaskActivity.EDIT_TASK_ID

作为一个例子,我正在使用Google示例-(我使用java版本,可以找到)

我们希望实现的目标:

  • 带着额外的意图开始活动
  • 向viewModel构造函数中注入额外的
  • 我的活动(在我想通过的地方)模块:

    @模块
    公共抽象类AddEditTaskModule{
    @提供
    @可空
    静态字符串ProvideTaskKid(AddEditTaskActivity活动){
    返回activity.getIntent().getStringExtra(AddEditTaskActivity.EDIT_TASK_ID);
    }
    @贡献Android注射器
    抽象AddEditTaskFragment contributedEdittaskFragment();
    @束缚
    @英托马普
    @ViewModelScope(AddEditTaskViewModel.class)
    抽象视图模型bindAddEditTaskViewModel(AddEditTaskViewModel视图模型);
    }
    
    我的工厂:

    公共类ViewModelFactory实现ViewModelProvider.Factory{
    
    私人最终地图调出,它比我想象的要简单

    对于常见视图模型:

    从ViewModelFactory中删除
    @Singleton
    注释

    @Singleton
    添加到ViewModelModule

    @Binds
    @独生子女
    抽象ViewModelProvider.Factory bindViewModelFactory(ViewModelFactory);
    
    对于需要使用额外注入的ViewModels:

    活动模块:

    @提供
    @可空
    静态字符串ProvideTaskKid(AddEditTaskActivity活动){
    返回activity.getIntent().getStringExtra(AddEditTaskActivity.EDIT_TASK_ID);
    }
    @束缚
    @命名(AddEditTaskViewModel.TAG)
    抽象ViewModelProvider.Factory bindAddEditTaskViewModelFactory(ViewModelFactory工厂);
    
    而不是在活动/片段中使用:

    @Inject
    @命名(AddEditTaskViewModel.TAG)
    工厂视图模型工厂;
    
    调出后,它比我想象的要简单

    对于常见视图模型:

    从ViewModelFactory中删除
    @Singleton
    注释

    @Singleton
    添加到ViewModelModule

    @Binds
    @独生子女
    抽象ViewModelProvider.Factory bindViewModelFactory(ViewModelFactory);
    
    对于需要使用额外注入的ViewModels:

    活动模块:

    @提供
    @可空
    静态字符串ProvideTaskKid(AddEditTaskActivity活动){
    返回activity.getIntent().getStringExtra(AddEditTaskActivity.EDIT_TASK_ID);
    }
    @束缚
    @命名(AddEditTaskViewModel.TAG)
    抽象ViewModelProvider.Factory bindAddEditTaskViewModelFactory(ViewModelFactory工厂);
    
    而不是在活动/片段中使用:

    @Inject
    @命名(AddEditTaskViewModel.TAG)
    工厂视图模型工厂;