JetPack Compose Pager 的 onPageSelected 回调
onPageSelected callback for JetPack Compose Pager
我正在使用 Accompanist 的 JetPack Compose Pager,我想知道我如何才能准确知道我的页面何时显示在屏幕上。喜欢 ViewPager 中的 onPageSelected 方法。
这是我的代码:
HorizontalPager(
state = pagerState,
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colors.background)
) { page ->
// This method reinvoked many times.
}
'因为目前每次重组都会从寻呼机调用该回调方法。
使用变量进行跟踪
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
}
我觉得用起来会更好
LaunchedEffect(pagerState) {
snapshotFlow { pagerState.currentPage }.collect { page ->
// do your stuff with selected page
}
}
要完成@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")
}
我们可以使用 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()
我正在使用 Accompanist 的 JetPack Compose Pager,我想知道我如何才能准确知道我的页面何时显示在屏幕上。喜欢 ViewPager 中的 onPageSelected 方法。
这是我的代码:
HorizontalPager(
state = pagerState,
modifier = Modifier
.fillMaxSize()
.background(MaterialTheme.colors.background)
) { page ->
// This method reinvoked many times.
}
'因为目前每次重组都会从寻呼机调用该回调方法。
使用变量进行跟踪
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
}
我觉得用起来会更好
LaunchedEffect(pagerState) {
snapshotFlow { pagerState.currentPage }.collect { page ->
// do your stuff with selected page
}
}
要完成@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")
}
我们可以使用 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()