Jetpack Compose - 如何获取 LazyVerticaGrid 项目行索引?
Jetpack Compose - How to get LazyVerticaGrid item row index?
我使用 LazyVerticalGrid 来显示项目,带有自适应 GridCells,即根据屏幕宽度,列数可变。
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 160.dp),
我希望顶行中的项目显示略有不同。我可以通过将布尔参数传递给这些项目可组合项来做到这一点,例如
itemsIndexed(
items = newsList,
) { index, item ->
NewsCard(
newsItem = item,
isHero = index == 0,
在此示例中,网格中的第一个项目将具有所需的布局,但如果网格中有多列,则顶行的其他项目将有所不同。我的问题是我不知道如何检测该项目是否在第一行。有没有办法动态读取 Adaptive LazyGrid 中有多少列?或者其他一些检索当前行索引的方法(而不只是项目索引)?
所以我发现 maxLineSpan
可以满足我的需求。这在 LazyGridItemSpanScope 中可用。这是我一直在寻找的解决方案(欢迎提出改进建议):
Surface {
val isHero = remember { mutableStateMapOf<Int, Boolean>() }
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 150.dp),
...
) {
itemsIndexed(
items = newsList,
span = { index, _ ->
isHero[index] = index < maxLineSpan -1
}
) { index, item ->
NewsCard(
newsItem = item,
isHero = isHero[index] == true,
...
我使用 LazyVerticalGrid 来显示项目,带有自适应 GridCells,即根据屏幕宽度,列数可变。
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 160.dp),
我希望顶行中的项目显示略有不同。我可以通过将布尔参数传递给这些项目可组合项来做到这一点,例如
itemsIndexed(
items = newsList,
) { index, item ->
NewsCard(
newsItem = item,
isHero = index == 0,
在此示例中,网格中的第一个项目将具有所需的布局,但如果网格中有多列,则顶行的其他项目将有所不同。我的问题是我不知道如何检测该项目是否在第一行。有没有办法动态读取 Adaptive LazyGrid 中有多少列?或者其他一些检索当前行索引的方法(而不只是项目索引)?
所以我发现 maxLineSpan
可以满足我的需求。这在 LazyGridItemSpanScope 中可用。这是我一直在寻找的解决方案(欢迎提出改进建议):
Surface {
val isHero = remember { mutableStateMapOf<Int, Boolean>() }
LazyVerticalGrid(
columns = GridCells.Adaptive(minSize = 150.dp),
...
) {
itemsIndexed(
items = newsList,
span = { index, _ ->
isHero[index] = index < maxLineSpan -1
}
) { index, item ->
NewsCard(
newsItem = item,
isHero = isHero[index] == true,
...