JetPack Compose Pager 的 onPageSelected 回调

Sir*_*lon 25 android android-jetpack-compose jetpack-compose-accompanist

我正在使用 Accompanist 的 JetPack Compose Pager,我想知道如何准确知道我的页面何时显示在屏幕上。就像ViewPager 中的onPageSelected方法一样。

这是我的代码:

HorizontalPager(
        state = pagerState,
        modifier = Modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.background)
    ) { page ->
         // This method reinvoked many times.

      }
Run Code Online (Sandbox Code Playgroud)

因为目前每个重组都会从 Pager 调用该回调方法。

ysf*_*yln 40

我认为使用会更好

LaunchedEffect(pagerState) {
    snapshotFlow { pagerState.currentPage }.collect { page ->
        // do your stuff with selected page
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 要删除第一次组合时的重复状态,请使用带有“distinctUntilChanged”的流程。snapshotFlow { pagerState.currentPage }.distinctUntilChanged().collect { page -> // 对所选页面执行操作 } (6认同)

Dag*_*ois 12

要完成@ysfcyln解决方案,请参阅官方文档:

https://google.github.io/accompanist/pager/#reacting-to-page-changes

完整的例子是:

val pagerState = rememberPagerState()

LaunchedEffect(pagerState) {
    // Collect from the a snapshotFlow reading the currentPage
    snapshotFlow { pagerState.currentPage }.collect { page ->
        AnalyticsService.sendPageSelectedEvent(page)
    }
}

VerticalPager(
    count = 10,
    state = pagerState,
) { page ->
    Text(text = "Page: $page")
}
Run Code Online (Sandbox Code Playgroud)