Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android Jetpack Compose中的可组合程序中启动协同程序_Android_Kotlin_Android Jetpack Compose - Fatal编程技术网

如何在Android Jetpack Compose中的可组合程序中启动协同程序

如何在Android Jetpack Compose中的可组合程序中启动协同程序,android,kotlin,android-jetpack-compose,Android,Kotlin,Android Jetpack Compose,我创建了一个LazyColumn,它从viewModel中获取项目,一切都很正常,但是我想要的是,当一个新项目插入到lazy column中时,我希望新项目的背景色为绿色2秒钟,然后变回白色。 以下是我为实现这一目标所做的工作,但该项目一直是绿色的: @Composable fun SingleItem(item: Item) { val new = remember { mutableStateOf(true) } val color: MutableState<Color>

我创建了一个LazyColumn,它从viewModel中获取项目,一切都很正常,但是我想要的是,当一个新项目插入到lazy column中时,我希望新项目的背景色为绿色2秒钟,然后变回白色。 以下是我为实现这一目标所做的工作,但该项目一直是绿色的:

@Composable
fun SingleItem(item: Item) {
val new = remember {
    mutableStateOf(true)
}
val color: MutableState<Color> = remember {
    if (new.value)
        mutableStateOf(Color(0xFFB9F6CA))
    else
        mutableStateOf(Color(0xFFFDFDFD))
}
Card(
    modifier = Modifier
        .padding(4.dp)
        .fillMaxWidth(),
    shape = RoundedCornerShape(8.dp),
    backgroundColor = color.value
) {
    GlobalScope.launch {
        delay(2000)
        new.value= !new.value
    }
    Column(
        modifier = Modifier
            .fillMaxWidth(),
        horizontalAlignment = Alignment.Start,
        verticalArrangement = Arrangement.SpaceBetween
    ) {
        Text(text = item.name, style = MaterialTheme.typography.h5)
        Text(text = "${item.quantity}", style = MaterialTheme.typography.h6)
    }
}
@Composable
趣味单品(品目:品目){
val new=记住{
可变状态(true)
}
val颜色:可变状态=记住{
if(新的.value)
可变状态(颜色(0xFFB9F6CA))
其他的
可变状态(颜色(0xFFFDFD))
}
卡片(
修饰语=修饰语
.填充(4.dp)
.fillMaxWidth(),
形状=圆形拐角形状(8.dp),
backgroundColor=color.value
) {
环球镜发射{
延迟(2000年)
new.value=!new.value
}
纵队(
修饰语=修饰语
.fillMaxWidth(),
水平对齐=对齐。开始,
垂直排列=排列。间距
) {
文本(Text=item.name,style=MaterialTheme.typography.h5)
Text(Text=“${item.quantity}”,style=MaterialTheme.typography.h6)
}
}

您可以使用返回
CoroutineScope
的函数
比如:

// Create a CoroutineScope that follows this composable's lifecycle
val composableScope = rememberCoroutineScope()

composableScope.launch {
    //... your code
}
更多信息。

您可以使用返回
CoroutineScope
的函数
比如:

// Create a CoroutineScope that follows this composable's lifecycle
val composableScope = rememberCoroutineScope()

composableScope.launch {
    //... your code
}
更多信息。

表达式

val color: MutableState<Color> = remember {
    if (new.value)
        mutableStateOf(Color(0xFFB9F6CA))
    else
        mutableStateOf(Color(0xFFFDFDFD))
}
要记住的lambda对于合成只有一次调用,并且在
new
更改时不会被视为无效。无需记住
a
Color()
value,因为它的速度足够快,只要
new.value
is发生更改,就可以重复它,这不会对合成造成很大负担

此外,正如Gabriele Mariotti所建议的,使用合成范围而不是
全局
。在这种情况下,这并不重要,因为它可能会使对
的引用比需要的时间长2秒,但进入as是一个非常好的习惯,当您使用合成上下文时,协作被取消当不再需要构图时(如屏幕上的行滚动)

此外,如果颜色不是一个占位符来查看一个协同程序的效果,请考虑使用动画,因为您可能希望颜色转换而不是SNAP。

< P>表达式,

val color: MutableState<Color> = remember {
    if (new.value)
        mutableStateOf(Color(0xFFB9F6CA))
    else
        mutableStateOf(Color(0xFFFDFDFD))
}
要记住的lambda对于合成只有一次调用,并且在
new
更改时不会被视为无效。无需记住
a
Color()
value,因为它的速度足够快,只要
new.value
is发生更改,就可以重复它,这不会对合成造成很大负担

此外,正如Gabriele Mariotti所建议的,使用合成范围而不是
全局
。在这种情况下,这并不重要,因为它可能会使对
的引用比需要的时间长2秒,但进入as是一个非常好的习惯,当您使用合成上下文时,协作被取消当不再需要构图时(如屏幕上的行滚动)


此外,如果颜色不是一个占位符来查看协同程序的效果,那么考虑使用动画,因为您可能希望颜色转换而不是SNAP。

尝试使用:<代码> Valo CordOutStudio = RealCyOutOnEclipse()。
coroutineScope.launch
尝试使用:
val coroutineScope=rememberCoroutineScope()
coroutineScope.launch
现在一切正常,感谢动画提示一切正常,感谢动画提示帮助分配感谢帮助分配感谢