android - 无法使用 Koin 从片段内部加载视图模型
问题描述
我有一个简单的片段和视图模型,我希望在片段中使用,但是它不断抛出以下错误:
Caused by: org.koin.core.error.NoBeanDefFoundException: No definition found for class:'com.me.ui.MovieListViewModel'. Check your definitions!
视图模型可以在活动类上很好地加载,但不能在片段上。
片段代码如下
class TopMoviesFragment : BaseFragment() {
private val movieListViewModel: MovieListViewModel by viewModel()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
movieListViewModel.doSomething()
视图模型代码
class MovieListViewModel constructor(private val someData: SomeData) : ViewModel() {
fun doSomething(){
someData.do()
}
}
Koin 设置
object AppComponent {
val getAllModules = listOf(MainAppModule,
ANotherMOdule,
networkModule,
uiModule)
}
val uiModule = module {
factory { SOmeData(get()) }
viewModel { MovieListViewModel(get()) }
}
class MovieListApp : Application() {
override fun onCreate() {
super.onCreate()
startKoin{
// Koin Android logger
androidLogger()
//inject Android context
androidContext(this@MovieListApp)
AppComponent.getAllModules}
}
}
解决方案
问题出在 startKoin 内部。
我必须在其中传递模块列表:
modules(AppComponent.getAllModules)
推荐阅读
- tkinter - tkinter entry widgter 值在使用主帧交换类的帧之间传递
- xamarin - Xamarin Shell.BackgroundColor 错误
- javascript - 如何一次记录多个变量?
- spss - 字符串变量中的字符限制
- django - 来自 RetrieveAPIView 的序列化数据到达混乱
- c++ - C++编译时/运行时选项和参数,如何处理?
- excel - 如何使用范围和值进行自动填充?
- c# - 我可以让 NugetRestore 在 azure devops (TFS) 上使用 build.cake
- javascript - merge two array of objects with javascript
- java - 如何使用 onCreate 方法在 MainActivity 中打开片段