HorizontalPager无限重组问题求助及替代方案咨询
HorizontalPager切换标签页后无限重组问题求助
我的布局结构伪代码如下:
Column { TabsRow { ScrollableTabsRow{} } HorizontalPager { Column { SubCategories { ScrollableHorizontalTabsRow or LazyHorizontalStaggeredGrid() } ProductsContent { LazyColumn {} } } } }
简单来说就是三层结构:
- 顶部分类标签栏(单行)
- 子分类栏(单行或多行)
- 商品列表
具体Composable实现代码:
@Composable fun ComposableContent() { val categories = state.categories val pagerState = rememberPagerState( initialPage = initialPage ) BaseCategoriesTabRow( state = pagerState, categories = categories, ) Spacer( modifier = Modifier .height(10.dp) .fillMaxWidth() .background(Color.White) ) HorizontalPager( state = pagerState, pageCount = categories.size ) { page -> val listState = rememberLazyListState() val isSelected = pagerState.currentPage == page categories.getOrNull(pagerState.currentPage)?.let { categoryItem -> val showItemsInOneRow = remember { derivedStateOf { listState.firstVisibleItemIndex > 1 || categoryItem.subCategories.size < SUBCATEGORIES_ROW_TWO_MIN } } Log.d("horizontalagertest", "PAGE: ${page} + CURRENTPAGE: ${pagerState.currentPage}") // if (isSelected) { -> 我用来抑制过度重组的临时方案 Column { if (categoryItem.subCategories.size > 1) { SubCategoriesTabRow( state = listState, showItemsInOneRow = showItemsInOneRow.value, events = events, category = categoryItem, rows = constRowQuantity, initialSubCategoryId = initialSubCategoryId ) { events.invoke(CategoryEvent.InitialSubcategoryHandled) } } // }
切换HorizontalPager标签页后,出现无限重组的情况,日志输出如下:
PAGE: 5, CURRENTPAGE: 5 PAGE: 6, CURRENTPAGE: 5 PAGE: 4, CURRENTPAGE: 5 PAGE: 6, CURRENTPAGE: 5 PAGE: 5, CURRENTPAGE: 5 PAGE: 4, CURRENTPAGE: 5 PAGE: 5, CURRENTPAGE: 5 PAGE: 6, CURRENTPAGE: 5 PAGE: 4, CURRENTPAGE: 5 PAGE: 6, CURRENTPAGE: 5 PAGE: 5, CURRENTPAGE: 5 PAGE: 4, CURRENTPAGE: 5
我试过用currentPage代替page,配合isSelected布尔值做判断,但会破坏页面切换动画。最初用的是accompanist库,后来迁移到最新版compose foundation 1.6.0,问题依然存在。希望能得到解决建议或替代组件方案。
内容的提问来源于stack exchange,提问作者user21300258
相关产品推荐
相关产品推荐

