Cal*_*ity 5 android android-jetpack-compose jetpack-compose-accompanist
我有一个包含两页的HorizontalPager( com.google.accompanist:accompanist-pager:0.20.0),每页都包含一个项目列表。每个项目都有一个在第一次合成时触发的输入动画。在编写寻呼机时,两个页面也会同时编写,但奇怪的是,并非总是如此。
由于其他原因,我存储PagerState在视图模型中,因此保留了最后一个活动选项卡。如果是第一页,则两个页面同时合成,导致帧时间图出现峰值。但是,如果它是第二页,则只有它由其列表组成,并且在我沿其方向滚动时立即填充第一页。那很方便!
为了更好地理解,这里有一些伪代码。
@Composable
fun PagerScreen(viewModel: SomeViewModel) {
val firstList by viewModel.firstListFlow.collectAsState()
val secondList by viewModel.secondListFlow.collectAsState()
HorizontalPager(
state = viewModel.pagerState
/* ... */
) { index ->
// "Switch-case"ing tabs by index and displaying a LazyColumn for each.
}
}
Run Code Online (Sandbox Code Playgroud)
如果我导航到此屏幕,滚动到第二个选项卡,然后导航到其他地方并再次返回,则第二个选项卡将在没有性能问题的情况下组合,而第一个选项卡将不会组合,直到我开始滚动到它(即延迟)。它实际上看起来像一个错误,但我希望在我的例子中出现这种行为。
所以问题是我们如何强制寻呼机的页面以惰性方式组合?
如果我们收集,这可能是可能的PagerState.targetPage,但它需要不平凡的逻辑,我想避免它,因为这种行为已经就位。
该问题可以通过添加任意数量的 来解决itemSpacing。
HorizontalPager(
state = viewModel.pagerState,
itemSpacing = 1.dp,
/* ... */
) { index ->
// "Switch-case"ing tabs by index and displaying a LazyColumn for each.
}
Run Code Online (Sandbox Code Playgroud)
如何?为什么?我们永远不会知道。但这样做会在同级库中引入另一个奇怪的问题com.google.accompanist:accompanist-pager-indicators:0.20.0,指标行为不正确,正如我在这个 gif中演示的那样。再次,注意指标。
尽管我非常喜欢 Compose,但到处都是的小错误让我抓狂。
| 归档时间: |
|
| 查看次数: |
4179 次 |
| 最近记录: |