LazyColumn 内部的 LazyColumn
LazyColumn inside LazyColumn
我正在尝试使用 LazyColumn
和下面的代码
创建并列出子列表
DropdownMenu(
expanded = expandedDomain,
onDismissRequest = { expandedDomain = false },
) {
LazyColumn {
items(1) {
Checkbox(checked = false /*checkedState.value*/,
onCheckedChange = {})
Text(text = "$domainResponse.domains[0].name")
}
LazyColumn {
items(domainResponse.domains[0].pwas) { pwas ->
Checkbox(checked = false /*checkedState.value*/,
onCheckedChange = {})
Text(text = "$pwas")
}
}
}
}
错误:
@Composable invocations can only happen from the context of a @Composable function
让我尝试部分解释您应该更改的内容。
1。为什么会出现错误?
@Composable invocations can only happen from the context of a @Composable function
occurred
如果我们查看 LazyColumn
代码,我们可以找到 content: LazyListScope.() -> Unit
作为内容参数数据类型。
这表明上下文没有可组合的上下文。
相反,像 Column
/Row
这样的可组合项将分别具有 content: @Composable ColumnScope.() -> Unit
/content: @Composable RowScope.() -> Unit
。
@Composable
表明 content
具有可组合上下文。
2。如何解决?
根据我在代码中看到的情况,您不需要在另一个 LazyColumn
中使用 LazyColumn
。您需要一个 LazyColumn
包含来自不同数据源的多个项目。
您可以像这样更改代码,
LazyColumn {
item {
Checkbox(checked = false /*checkedState.value*/,
onCheckedChange = {})
Text(text = "$domainResponse.domains[0].name")
}
items(domainResponse.domains[0].pwas) { pwas ->
Checkbox(checked = false /*checkedState.value*/,
onCheckedChange = {})
Text(text = "$pwas")
}
// You can have multiple lists in a single LazyColumn
items(list2Items) { item ->
Text(text = "$item")
}
}
3。 item
对比 items
如果您只有一个项目,请使用 item
而不是 items(1)
,因为它们是等价的,但这会更清楚。
P.S:
LazyColumn
使用 item
或 items
,其中 itemContent
具有可组合上下文。因此我们可以在其中添加可组合项。
我正在尝试使用 LazyColumn
和下面的代码
DropdownMenu(
expanded = expandedDomain,
onDismissRequest = { expandedDomain = false },
) {
LazyColumn {
items(1) {
Checkbox(checked = false /*checkedState.value*/,
onCheckedChange = {})
Text(text = "$domainResponse.domains[0].name")
}
LazyColumn {
items(domainResponse.domains[0].pwas) { pwas ->
Checkbox(checked = false /*checkedState.value*/,
onCheckedChange = {})
Text(text = "$pwas")
}
}
}
}
错误:
@Composable invocations can only happen from the context of a @Composable function
让我尝试部分解释您应该更改的内容。
1。为什么会出现错误?
@Composable invocations can only happen from the context of a @Composable function
occurred
如果我们查看 LazyColumn
代码,我们可以找到 content: LazyListScope.() -> Unit
作为内容参数数据类型。
这表明上下文没有可组合的上下文。
相反,像 Column
/Row
这样的可组合项将分别具有 content: @Composable ColumnScope.() -> Unit
/content: @Composable RowScope.() -> Unit
。
@Composable
表明 content
具有可组合上下文。
2。如何解决?
根据我在代码中看到的情况,您不需要在另一个 LazyColumn
中使用 LazyColumn
。您需要一个 LazyColumn
包含来自不同数据源的多个项目。
您可以像这样更改代码,
LazyColumn {
item {
Checkbox(checked = false /*checkedState.value*/,
onCheckedChange = {})
Text(text = "$domainResponse.domains[0].name")
}
items(domainResponse.domains[0].pwas) { pwas ->
Checkbox(checked = false /*checkedState.value*/,
onCheckedChange = {})
Text(text = "$pwas")
}
// You can have multiple lists in a single LazyColumn
items(list2Items) { item ->
Text(text = "$item")
}
}
3。 item
对比 items
如果您只有一个项目,请使用 item
而不是 items(1)
,因为它们是等价的,但这会更清楚。
P.S:
LazyColumn
使用 item
或 items
,其中 itemContent
具有可组合上下文。因此我们可以在其中添加可组合项。