【发布时间】:2021-04-20 22:35:47
【问题描述】:
我有一个可组合对象,它获取一个可变状态的整数!
整数是一个计时器值!像 0 一样每秒增加一次
我必须在可组合内做的是转换为可表示的字符串,比如 60 秒,我将显示 1 分钟
所以我这样做
val timeString = remember {
mutableStateOf("00:00")
}
val durationString = if(duration!=0) {
var secondTime = ((duration / 1000) % 60).toString()
var minuteTime = ((((duration / 1000) / 60) % 60)).toString()
if (secondTime.length == 1) {
secondTime = "0$secondTime"
}
if (minuteTime.length == 1) {
minuteTime = "0$minuteTime"
}
"$minuteTime:$secondTime"
}else{
"00:00"
}
timeString.value = durationString
Text(
modifier = Modifier
.weight(1f)
.padding(horizontal = 16.dp),
text = timeString.value,
style = MaterialTheme.typography.h4
)
但是文本没有更新,但是由于持续时间是一个可变状态,如果我直接使用它,文本会更新,所以我尝试了 LaunchedEffect 但它没有用我想知道我能做到这一点的最佳方法是什么撰写!
【问题讨论】:
-
我还尝试创建另一个文本状态,并使用 launchEffect 更新文本状态值,但它不更新文本
-
用
remember(duration) { /* your if */}包装你的 if 如果你想知道为什么我建议阅读记忆文档 -
它不工作
-
能否请您也提供您的状态创建/传递的代码
-
你可以做一些不同的事情。用
CountDownTimer?定义ViewModel并在您的可组合函数中使用类似:val secs = countTimeViewModel.seconds.observeAsState()
标签: android android-jetpack-compose