在我的项目中添加依赖项“实现“androidx.lifecycle:lifecycle-viewmodel-compose:2.5.1””后,我注意到任何集合中的 random() 的工作方式非常奇怪。 添加依赖项后,从任何集合中调用 random() 都会得到相同的结果集。 例如,以下代码将始终给我相同的数字。我启动应用程序。在文本上点击一些,就会看到一组数字。关闭应用程序并将其从内存中清除,再次启动并看到同一组数字。即使重新安装后,我仍然看到相同的一组数字
var numbers by remember {
mutableStateOf("numbersFromSet")
}
Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center) {
val setOfNumbers = setOf(1,2,3,4,5,6,7,8,9)
Text(text = numbers, modifier = Modifier.clickable {
numbers = setOfNumbers.random().toString()
})
}
我使用什么集合以及它的存储位置并不重要。看起来添加依赖项后 random() 的输出变得预定义。我可以在物理和虚拟设备上看到这种行为。从 gradle 中删除依赖项后,random() 将按预期工作。我总是看到随机结果。 如果有问题的话,我正在使用 android studio Chipmunk 2021.2.1 Patch 1 我将非常感谢您的回答
最佳答案
对于您的问题,您可以使用以下解决方案每次都获得不同的数字。
它只是在每次点击时更改Random
的seed
。
numbers = setOfNumbers.random(Random(System.currentTimeMillis())).toString()
Kotlin Random
之所以给出相同的数字,是因为它使用相同的 seed
,更多详细信息 here和 here 。
我不确定为什么这种情况只发生在特定的依赖项上。然而,当使用该依赖项时,上述解决方案也将起作用,因为种子
是唯一的。
关于build.gradle - Jetpack Compose 生命周期 View 模型依赖性使得集合中的 random() 不是随机的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74706246/