【发布时间】:2021-10-20 12:46:30
【问题描述】:
试图通过向工厂提供匕首来在片段中创建视图模型,但应用程序因错误而崩溃。将注入移至另一个生命周期不起作用
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.bigproject.planyourlife, PID: 13934
kotlin.UninitializedPropertyAccessException: lateinit property factory has not been initialized
at com.bigproject.planyourlife.view.SignupFragment.getFactory(SignupFragment.kt:27)
视图模型
class SignupViewModel(private val service: AuthService) : ViewModel() {
private var email: String = ""
private var password: String = ""
private val _uiState = MutableStateFlow<SignupState>(SignupState.Success(null))
val uiState: StateFlow<SignupState> = _uiState
@Suppress("UNCHECKED_CAST")
class Factory @Inject constructor(
private val service: AuthService
) : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
require(modelClass == SignupViewModel::class)
return SignupViewModel(service) as T
}
}
片段
class SignupFragment : Fragment(R.layout.signup_page) {
private val binding by viewBinding(SignupPageBinding::bind)
private val signupViewModel: SignupViewModel by viewModels {
factory
}
@Inject
lateinit var factory: SignupViewModel.Factory
override fun onAttach(context: Context) {
context.appComponent.inject(this)
super.onAttach(context)
}
}
【问题讨论】:
-
您是否将
SignupViewModel.Factory和SignupFragment正确绑定到您的模块?您是否正在使用 DI 获取SignupFragment? -
@momt99 我没有使用DI获得任何片段,我不太明白它应该如何工作,因为我最近开始学习匕首
标签: android kotlin dagger-2 android-viewmodel