我正在做实验来理解重组和智能重组并制作了一个样本
\n\n抱歉,颜色是用 Random.nextIn() 生成的,以便在视觉上观察重组,设置颜色对重组没有影响,也尝试不更改颜色。
\ngif的内容由三部分组成
\n样品1
\n@Composable\nprivate fun Sample1() {\n\n Column(\n modifier = Modifier\n .background(getRandomColor())\n .fillMaxWidth()\n .padding(4.dp)\n ) {\n var counter by remember { mutableStateOf(0) }\n\n\n Text("Sample1", color = getRandomColor())\n\n Button(\n modifier = Modifier\n .fillMaxWidth()\n .padding(vertical = 4.dp),\n colors = ButtonDefaults.buttonColors(backgroundColor = getRandomColor()),\n onClick = {\n counter++\n }) {\n Text("Counter: $counter", color = getRandomColor())\n }\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n我在这里没有问题,因为智能组合按预期工作,Text
最重要的是不读取更改,counter
因此重组仅发生在Text
inside Button
。
样品2
\n@Composable\nprivate fun Sample2() {\n Column(\n modifier …
Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack-compose compose-recomposition
我正在尝试执行一些列表操作,但遇到了单个项目更新时所有项目重新组合的问题。
我的模特;
data class Person(val id: Int, val name: String, val isSelected: Boolean = false)
@Stable
data class PersonsWrapper(val persons: List<Person>)
Run Code Online (Sandbox Code Playgroud)
我的ViewModel和更新功能;
private val initialList = listOf(
Person(id = 0, name = "Name0"),
Person(id = 1, name = "Name1"),
Person(id = 2, name = "Name2"),
Person(id = 3, name = "Name3"),
Person(id = 4, name = "Name4"),
Person(id = 5, name = "Name5"),
Person(id = 6, name = "Name6"),
)
val list = mutableStateOf(PersonsWrapper(initialList))
fun updateItemSelection(id: Int) {
val …
Run Code Online (Sandbox Code Playgroud) android android-jetpack-compose compose-recomposition android-jetpack-compose-lazy-column