Viv*_*ngh 6 java android kotlin android-jetpack-navigation android-jetpack-compose
我在我的应用程序中使用导航组件进行 jetpack 组合,如下所示:
@Composable
fun FoodiumNavigation() {
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = Screen.Main.route,
) {
composable(Screen.Main.route) {
MainScreen(navController)
}
...
}
}
Run Code Online (Sandbox Code Playgroud)
我正在像这样进入viewmodel我的MainScreen组合:
@Composable
fun MainScreen(navController: NavController) {
val mainViewModel: MainViewModel = viewModel()
...
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个运行时异常作为Cannot create an instance of class com.package.main.MainViewModel.
在这里,我声明这仅在使用导航组件时发生,即一切正常,并且mainViewModel在我的应用程序中使用导航组件之前已成功实例化。
该MainViewModel是这样的:
@ExperimentalCoroutinesApi
@HiltViewModel
class MainViewModel @Inject constructor(private val postRepository: PostRepository) :
ViewModel() {
private val _postsLiveDataState = MutableLiveData<UiState<List<Post>>>()
val postLiveState: LiveData<UiState<List<Post>>> = _postsLiveDataState
init {
getPostsState()
}
private fun getPostsState() {
viewModelScope.launch {
postRepository.getAllPosts()
.onStart { _postsLiveDataState.value = UiState(loading = true) }
.map { resource -> UiState.fromResource(resource) }
.collect { state -> _postsLiveDataState.value = state }
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您的 @HiltViewModel 范围限定为导航图,请使用 hiltNavGraphViewModel() 而不是 viewModel() 进行初始化。更多参考android文档
更新
hiltNavGraphViewModel() 现已弃用,请改用 hiltViewModel()
感谢Narek Hayrapetyan的提醒
| 归档时间: |
|
| 查看次数: |
1067 次 |
| 最近记录: |