在Android上使用Dagger和Java时,ViewModelProvider.Factory在片段上保持空
使用google示例,我一直在尝试注入ViewModelProvider.Factory 当与示例进行比较时,我看到它在GithubViewModelFactory中运行良好,但我的始终没有,我不确定我缺少了什么。希望它非常简单,大概是因为我使用了androidx组件 主要活动:在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
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"