AmrJyniat
05/26/2025, 11:24 AMLazyHorizontalGrid
when implementing it inside HorizontalPager
, the scrolling behaviour working fine on LazyHorizontalGrid
when scroll to the next page direction, but when swipe pager to the previous page, it starts scrolling the items in the previous LazyHorizontalGrid
page even before settle to the target page, how to prevent scrolling items when swiping between pages in pager?AmrJyniat
05/26/2025, 11:26 AMHorizontalPager
and `LazyHorizontalGrid`:
HorizontalPager(
state = pagerState,
modifier = Modifier.fillMaxWidth(),
) { index ->
val paletteGroup = palettesGroups[index]
PalettesPage(
pageIndex = index,
selectedColor = selectedColor,
paletteItems = paletteGroup.items,
preDefinedItems = preDefinedItems,
numberOfRows = numberOfRows,
modifier = modifier,
height = height,
onColorSelected = onColorSelected,
)
}
@Composable
private fun PalettesPage(
selectedColor: ColorItem?,
paletteItems: List<ColorItem>,
preDefinedItems: List<@Composable ((() -> Unit) -> Unit)>,
numberOfRows: Int,
modifier: Modifier,
height: Dp,
onColorSelected: (ColorItem) -> Unit,
pageIndex: Int,
) {
val gridScrollState = rememberLazyGridState()
var selectedIndex by remember { mutableStateOf(0) }
LazyHorizontalGrid(
state = gridScrollState,
rows = GridCells.Fixed(numberOfRows),
contentPadding = PaddingValues(horizontal = 12.dp),
modifier = modifier
.fillMaxWidth()
.height(height),
verticalArrangement = Arrangement.spacedBy(8.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp),
) {
itemsIndexed(paletteItems) { index, item ->
PaletteItem(
modifier = Modifier
.offset(x = if (numberOfRows == 2 && index % 2 == 1) 24.dp else 0.dp)
.size(44.dp),
isSelected = selectedIndex == index + preDefinedItems.size,
onSelected = {
onColorSelected(item)
selectedIndex = index + preDefinedItems.size
},
colorItem = item,
isNew = false,
isPremium = false,
)
}
}
}
Ori Spokoini
05/26/2025, 4:25 PMAltynbek Nurtaza
05/29/2025, 5:21 AMAmrJyniat
05/29/2025, 8:15 AM