Jetpack Compose:如何将 LazyVerticalGrid 放在可滚动列中?

时间:2021-06-10 10:53:08

标签: android kotlin android-jetpack-compose

尝试将 LazyVerticalGrid 放入 scrollable Column 时,出现以下错误:

<块引用>

java.lang.IllegalStateException: 嵌套可滚动在同一个 方向布局,如 LazyColumn 和 不允许使用 Column(Modifier.verticalScroll())。如果你想添加一个 项目列表前的标题请查看 LazyColumn 具有 DSL api 的组件,它允许首先通过以下方式添加标头 item() 函数,然后通过 items() 获取项目列表。

我不是在做一个传统的列表,我只是有很多元素太大而无法显示在屏幕上。因此,我希望该列滚动,以便我可以看到所有元素。这是我的代码:

@ExperimentalFoundationApi
@Composable
fun ProfileComposable(id: String?) {
    val viewModel: ProfileViewModel = viewModel()
    if (id != null) {
        viewModel.getProfile(id)
        val profile = viewModel.profile.value
        val scrollState = rememberScrollState()
        if (profile != null) {
            Column(modifier = Modifier
                .fillMaxWidth()
                .fillMaxHeight()
                .verticalScroll(scrollState)) {
                Row() {
                    ProfilePic(profile.getImgUrl(), profile.name)
                    Column(Modifier.padding(16.dp)) {
                        ProfileName(profile.name)
                        Stats(profile.stats) //      <--------------- the offending composable
                    }
                }
                Sprites(sprites = profile.sprites)
                TextStat(profile.id.toString(), "Pokemon Number")
                TextStat(profile.species.name, "Species")
                TextStat(profile.types.joinToString { it.type.name }, "Types")
                TextStat(profile.weight.toString(), "Weight")
                TextStat(profile.forms.joinToString { it.name }, "Forms")
            }
        } else {
            Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
                CircularProgressIndicator()
            }
        }
    } else {
        Text("Error")
    }
} 

Stats() 可组合包含导致错误的 LazyVerticalGrid

@ExperimentalFoundationApi
@Composable
fun Stats(stats: List<Stat>) {
    LazyVerticalGrid(cells = GridCells.Fixed(2)) {
        itemsIndexed(stats) { index, item ->
            StatBox(stat = item)
        }
    }
}

我不想让网格滚动,我只想在可滚动列中显示一个网格。

0 个答案:

没有答案