val secondScreenResult = navController.currentBackStackEntry
?.savedStateHandle
?.getLiveData<String>("your_key")?.observeAsState()
...
secondScreenResult?.value?.let {
// Read the result
}
val screenResultState = navController.currentBackStackEntry
?.savedStateHandle
?.getLiveData<String>("some_key")?.observeAsState()
screenResultState?.value?.let {
...
// make something, for example `viewModel.onResult(it)`
...
//removing used value
navController.currentBackStackEntry
?.savedStateHandle
?.remove<String>("some_key")
}
5条答案
按热度按时间wvmv3b1j1#
从要返回数据的可组合文件中,可以执行以下操作:
然后从源Composable中,可以使用
LiveData
侦听更改。bogh5gae2#
如果只需要一次获取值,则需要在使用后删除值:
我还在函数中提取它(用于JetPack合成)
您可以将其复制到您的项目中,并按如下方式使用:
oug3syen3#
对于jetpack合成,必须将
Flow
与collectAsState
一起使用才能获得结果:您也可以删除条目,并在
screenVM.refresh()
后添加此条目:bhmjp9jg4#
不使用LiveData或Flow也可以得到结果,可以使用
savedStateHandle.remove
方法,我认为这是更简单的方法:gv8xihay5#