在Android上使用Dagger和Java时,ViewModelProvider.Factory在片段上保持空

在Android上使用Dagger和Java时,ViewModelProvider.Factory在片段上保持空,java,android,dagger-2,androidx,android-mvp,Java,Android,Dagger 2,Androidx,Android Mvp,使用google示例,我一直在尝试注入ViewModelProvider.Factory 当与示例进行比较时,我看到它在GithubViewModelFactory中运行良好,但我的始终没有,我不确定我缺少了什么。希望它非常简单,大概是因为我使用了androidx组件 主要活动: public class MainActivity extends AppCompatActivity implements HasSupportFragmentInjector { @Inject

使用google示例,我一直在尝试注入ViewModelProvider.Factory

当与示例进行比较时,我看到它在GithubViewModelFactory中运行良好,但我的始终没有,我不确定我缺少了什么。希望它非常简单,大概是因为我使用了androidx组件

主要活动:

public class MainActivity extends AppCompatActivity implements HasSupportFragmentInjector {

    @Inject
    DispatchingAndroidInjector<Fragment> dispatchingAndroidInjector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public DispatchingAndroidInjector<Fragment> supportFragmentInjector() {
        return dispatchingAndroidInjector;
    }
}
应用组件:

@Singleton
@Component(modules = {
        AndroidSupportInjectionModule.class,
        AppModule.class,
        MainActivityModule.class
})
public interface AppComponent {
    @Component.Builder
    interface Builder {
        @BindsInstance Builder application(Application application);
        AppComponent build();
    }
    void inject(CrosscareApp crosscareApp);
}
应用模块:

@Module(includes = ViewModelModule.class)
class AppModule {
    @Singleton @Provides
    CrosscareService provideCrossCareService() {
        return new Retrofit.Builder()
           ..........
    }
ViewModelModule:

@Module
abstract class ViewModelModule {
    @Binds
    @IntoMap
    @ViewModelKey(CategoryViewModel.class)
    abstract ViewModel bindCategoryViewModel(CategoryViewModel categoryViewModel);

    @Binds
    abstract ViewModelProvider.Factory bindViewModelFactory(CrosscareViewModelFactory factory);
}
CrosscareViewModel:

@Singleton
public class CrosscareViewModelFactory implements ViewModelProvider.Factory {

    private final Map<Class<? extends ViewModel>, Provider<ViewModel>> creators;

    @Inject
    public CrosscareViewModelFactory(Map<Class<? extends ViewModel>, Provider<ViewModel>> creators) {
        this.creators = creators;
    }
@Singleton
公共类CrosscareViewModelFactory实现ViewModelProvider.Factory{

私人最终地图毕竟,我遗漏了一件事。在清单中,我需要:

 android:name=".CrosscareApp"
在样本中,它是

 android:name=".GithubApp"
可能是目录根目录下的文件


然后它就开始工作了。

天哪,真是个好发现。
 android:name=".CrosscareApp"
 android:name=".GithubApp"