处理程序 postDelays 是否不能与 for 循环一起使用 我已经尝试了几种方法,但无法让它工作。 Kotlin,android 工作室
Do handlers postDelays not work with for loops I've tried several ways, but cant get it to work. Kotlin, android studios
请原谅我目前编程的糟糕方式,我是编程新手。
好吧,假设我制作了一个简单的 dnd 骰子滚筒(因为我是)。我做到了,所以它会根据他们想要掷出的骰子数量和骰子类型来掷出一堆随机数。然后它将它发送到文本视图,一次相信一个。我想添加一个短暂的延迟,所以我问了 Whosebug,我相信有一个处理程序在工作;但是,出于同样的原因,我首先需要延迟。它只显示显示屏上滚动的最后一个数字,现在按下按钮之间有很短的延迟。我想向用户显示每个号码一次滚动一个,每个号码之间有一个短暂的延迟。
没有处理程序的代码示例:
else if (numTimesRolled.progress <= 4) {
for (i in 0 until numTimesRolled.progress + 1){
randNum = Random.nextInt(1, diceIsComfirm)
resultsArray[i] = randNum.toString()
randNumDisplay.text = resultsArray[i]
}
randNumResultsDisplay.text = "Rolled ${resultsArray.joinToString(" ")}"
}
输出:最后滚动的数字
我尝试使用处理程序的示例:
else if (numTimesRolled.progress <= 3) {
for (i in 0 until numTimesRolled.progress + 1){
randNum = Random.nextInt(1, diceIsComfirm)
resultsArray[i] = randNum.toString()
var runResults = Runnable {
randNumDisplay.text = resultsArray[i]
}
var delayResults = Handler()
delayResults.postDelayed(runResults, 1000)
}
//for (i in 0 until numTimesRolled.progress + 1){
//}
randNumResultsDisplay.text = "Rolled ${resultsArray.joinToString(" ")}"
}
////////////////////////////////////////// //////////////////////////////////////////////// ///
else if (numTimesRolled.progress <= 3) {
for (i in 0 until numTimesRolled.progress + 1){
randNum = Random.nextInt(1, diceIsComfirm)
resultsArray[i] = randNum.toString()
}
for (i in 0 until numTimesRolled.progress + 1){
var runResults = Runnable {
randNumDisplay.text = resultsArray[i]
}
var delayResults = Handler()
delayResults.postDelayed(runResults, 1000)
}
randNumResultsDisplay.text = "Rolled ${resultsArray.joinToString(" ")}"
}
输出:运行 和正常情况一样,但每次按下按钮时都会延迟滚动的最后一个数字。
我尝试将整个 for 循环设为“Runnable”,但这只是我在寻找解决方案时的愚蠢行为。
PostDelay 不等待时间量。它 post 是给处理程序的消息,指定它应该在什么时候做某事。为了得到你想要的,每个 postDelay runnable 必须 post 另一个 post delay。
请原谅我目前编程的糟糕方式,我是编程新手。
好吧,假设我制作了一个简单的 dnd 骰子滚筒(因为我是)。我做到了,所以它会根据他们想要掷出的骰子数量和骰子类型来掷出一堆随机数。然后它将它发送到文本视图,一次相信一个。我想添加一个短暂的延迟,所以我问了 Whosebug,我相信有一个处理程序在工作;但是,出于同样的原因,我首先需要延迟。它只显示显示屏上滚动的最后一个数字,现在按下按钮之间有很短的延迟。我想向用户显示每个号码一次滚动一个,每个号码之间有一个短暂的延迟。
没有处理程序的代码示例:
else if (numTimesRolled.progress <= 4) {
for (i in 0 until numTimesRolled.progress + 1){
randNum = Random.nextInt(1, diceIsComfirm)
resultsArray[i] = randNum.toString()
randNumDisplay.text = resultsArray[i]
}
randNumResultsDisplay.text = "Rolled ${resultsArray.joinToString(" ")}"
}
输出:最后滚动的数字
我尝试使用处理程序的示例:
else if (numTimesRolled.progress <= 3) {
for (i in 0 until numTimesRolled.progress + 1){
randNum = Random.nextInt(1, diceIsComfirm)
resultsArray[i] = randNum.toString()
var runResults = Runnable {
randNumDisplay.text = resultsArray[i]
}
var delayResults = Handler()
delayResults.postDelayed(runResults, 1000)
}
//for (i in 0 until numTimesRolled.progress + 1){
//}
randNumResultsDisplay.text = "Rolled ${resultsArray.joinToString(" ")}"
}
////////////////////////////////////////// //////////////////////////////////////////////// ///
else if (numTimesRolled.progress <= 3) {
for (i in 0 until numTimesRolled.progress + 1){
randNum = Random.nextInt(1, diceIsComfirm)
resultsArray[i] = randNum.toString()
}
for (i in 0 until numTimesRolled.progress + 1){
var runResults = Runnable {
randNumDisplay.text = resultsArray[i]
}
var delayResults = Handler()
delayResults.postDelayed(runResults, 1000)
}
randNumResultsDisplay.text = "Rolled ${resultsArray.joinToString(" ")}"
}
输出:运行 和正常情况一样,但每次按下按钮时都会延迟滚动的最后一个数字。
我尝试将整个 for 循环设为“Runnable”,但这只是我在寻找解决方案时的愚蠢行为。
PostDelay 不等待时间量。它 post 是给处理程序的消息,指定它应该在什么时候做某事。为了得到你想要的,每个 postDelay runnable 必须 post 另一个 post delay。