我正在检查我的调试,我看到我的ViewModel或屏幕运行多次
我viewModel
@HiltViewModel
class DownloadViewModel @Inject constructor(
private val repository: DataRepository
): ViewModel() {
val downloadList: LiveData<List<DownloadModel>> = repository.getDownload().asLiveData()
屏幕
@Composable
fun TetsScreen(dm : DownloadViewModel){
Log.e("is running", "true")
val downloads by dm.downloadList.observeAsState()
Column(modifier = Modifier
.background(color = Color.White)
.fillMaxSize()
.verticalScroll(rememberScrollState())
) {
if (downloads.isNullOrEmpty()){
//to do
}else{
Log.e("its", "work")
}
}
我NavHost
val navController = memorbernavcontroller ()NavHost(navController = navController, startDestination = AppScreens.MainScreen.name){
composable(AppScreens.TestScreen.name){
TetsScreen(downloadViewModel)
}
composable(AppScreens.MainScreen.name){
MainScreen(navController = navController, userViewModel, profileViewModel, downloadViewModel)
}
用于启动新屏幕
LaunchedEffect(Unit){
navController.navigate(AppScreens.TestScreen.name) {
popUpTo(AppScreens.MainScreen.name) { inclusive = true}
}
}
和我的调试
E/is running: true
E/is running: true
E/is running: true
E/its: work
E/is running: true
E/its: work
E/its: work
但是当我删除
val downloads = dm.downloadList.observeAsState()
一切都会恢复正常
我尝试启动屏幕没有启动效果,但没有改变
如果你能帮助我,请告诉我
这实际上不是你的视图模型,因为你从LiveData收集数据,每次你得到一个更新(不管它的内容),组成检测到它,并得到刷新每一个新的观察到的数据变化,这就是为什么你看到你的日志每一个重新组合为"E/正在运行:true"直到一些数据成功加载,最后显示一个"E/正在运行":true&;后面是"E/its: work"的日志。