gpt4 book ai didi

java - 如何使用 Dagger2 绑定(bind)到具有多个 ViewModelFactory 的 map

转载 作者:行者123 更新时间:2023-11-29 02:36:36 24 4
gpt4 key购买 nike

我试着效仿谷歌的例子(ViewModelModule)。我看到它可以将不同的 ViewModel 类型绑定(bind)到通用类型。

@Module
abstract class ViewModelModule {
@Binds
@IntoMap
@ViewModelKey(UserViewModel.class)
abstract ViewModel bindUserViewModel(UserViewModel userViewModel);

@Binds
@IntoMap
@ViewModelKey(SearchViewModel.class)
abstract ViewModel bindSearchViewModel(SearchViewModel searchViewModel);

@Binds
@IntoMap
@ViewModelKey(RepoViewModel.class)
abstract ViewModel bindRepoViewModel(RepoViewModel repoViewModel);

@Binds
abstract ViewModelProvider.Factory bindViewModelFactory(GithubViewModelFactory factory);
}

我想做的是将多个 ViewModelProvider.Factory 绑定(bind)到通用的。

@Module
abstract class ViewModelModule {


@Binds
@IntoMap
@ViewModelFactoryKey(FeedEntryListViewModelFactory.class)
abstract ViewModelProvider.Factory bindViewModelFactory(FeedEntryListViewModelFactory factory);

}

ViewModelFactoryKey.java

@Documented
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@MapKey
@interface ViewModelFactoryKey {
Class<? extends ViewModelProvider.Factory > value();
}

FeedActivity.java

public class FeedActivity extends DaggerAppCompatActivity {


@Inject
ViewModelProvider.Factory viewModelFactory;

FeedEntryListViewModel viewModel;


@SuppressLint("StaticFieldLeak")
@Override
protected void onCreate(Bundle savedInstanceState) {
...
}
}

但是,它会抛出以下错误。

Error:(21, 8) error: [dagger.android.AndroidInjector.inject(T)] android.arch.lifecycle.ViewModelProvider.Factory cannot be provided without an @Provides- or @Produces-annotated method.
android.arch.lifecycle.ViewModelProvider.Factory is injected at
com.cn29.aac.ui.feedentry.FeedActivity.viewModelFactory
com.cn29.aac.ui.feedentry.FeedActivity is injected at
dagger.android.AndroidInjector.inject(arg0)

我是 Dagger2 的新手。如果使用不当,欢迎大家批评指正。谢谢。

最佳答案

您必须更改以下内容:

@Inject
ViewModelProvider.Factory viewModelFactory;

对此:

@Inject
Map<Class<? extends ViewModelProvider.Factory>, Provider<ViewModelProvider.Factory>> viewModelFactoriesMap;

关于java - 如何使用 Dagger2 绑定(bind)到具有多个 ViewModelFactory 的 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46601474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com