onPageSelected回调JetPack撰写页



我正在使用伴奏者的JetPack撰写页面,我想知道我如何确切地知道我的页面何时显示在屏幕上。像onPageSelected

下面是我的代码:
HorizontalPager(
state = pagerState,
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colors.background)
) { page ->
// This method reinvoked many times.
}

因为当前每次重组都会从Pager调用那个回调方法。

我觉得用

比较好
LaunchedEffect(pagerState) {
snapshotFlow { pagerState.currentPage }.collect { page ->
// do your stuff with selected page
}
}

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

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")
}

这是我的解决方案,对我来说很有效。额外的内容是"distinctUntilChanged">

LaunchedEffect(pagerState) {
snapshotFlow {
pagerState.currentPage
}.distinctUntilChanged().collect { page ->
// Now you can use selected page
onPageChangeListener.invoke(page)
}
}

这是一个比官方文档

更简单的解决方案。
LaunchedEffect(pagerState.currentPage) {
// do your stuff with pagerState.currentPage
}

使用一个变量来跟踪

val trigger by remember { mutableStateOf (false) }
HorizontalPager(
state = pagerState,
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colors.background)
) { page ->
// Shown successfully,
trigger = true //use at other places as a callback to change state
}

我们可以使用PagerState来完成我们的任务,而不需要任何回调。

val pagerState = rememberPagerState(pageCount = list.size)

HorizontalPager(state = pagerState) { page ->
// Our page content
CardItemView(page, list[page])
}
// Do your tasks based on the current page selected using pagerState.currentPage
Toast.makeText(
LocalContext.current,
"Page selected ${pagerState.currentPage}",
Toast.LENGTH_SHORT
).show()

最新更新