【问题标题】:Android Compose: can composables store more than a single state?Android Compose:可组合项可以存储多个状态吗?
【发布时间】:2021-04-19 09:18:53
【问题描述】:

来自官方文档 (Managing State)

可组合函数可以通过使用记忆可组合将单个对象存储在内存中。在初始合成期间,remember 计算的值存储在合成中,并且在重新合成期间返回存储的值。您可以使用 remember 来存储可变和不可变对象。

所以每个可组合项只有一个 remember,但我在网上找到了在可组合​​项中使用多个状态的代码,实际上来自官方来源:DropdownMenu

@Composable
fun DropdownDemo() {
    var expanded by remember { mutableStateOf(false) }
    var selectedIndex by remember { mutableStateOf(0) }
    val items = listOf("A", "B", "C", "D", "E", "F")
    val disabledValue = "B"
    Box(modifier = Modifier.fillMaxSize().wrapContentSize(Alignment.TopStart)) {
        Text(items[selectedIndex],modifier = Modifier.fillMaxWidth().clickable(onClick = { expanded = true }).background(
            Color.Gray))
        DropdownMenu(
            expanded = expanded,
            onDismissRequest = { expanded = false },
            modifier = Modifier.fillMaxWidth().background(
                Color.Red)
        ) {
            items.forEachIndexed { index, s ->
                DropdownMenuItem(onClick = {
                    selectedIndex = index
                    expanded = false
                }) {
                    val disabledText = if (s == disabledValue) {
                        " (Disabled)"
                    } else {
                        ""
                    }
                    Text(text = s + disabledText)
                }
            }
        }
    }
}

代码运行良好,但它存储了两种状态,不是吗?!

【问题讨论】:

    标签: android android-jetpack-compose


    【解决方案1】:

    我假设文档的意思是,使用一个 remember 可以存储一个对象,而不是每个可组合项不能有多个 remember 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多