如何在 Jetpack 撰写的 Horizo​​ntalPager 中检测滑动?

How to detect swipe in HorizontalPager in Jetpack compose?

如何在我的 HorizontalPager()?

中检测用户何时从一个选项卡滑动到第二个选项卡等等
val pagerState = rememberPagerState(initialPage = 0)
HorizontalPager(count = TabCategory.values().size, state = pagerState) { index ->
                                Box(
                                    modifier = Modifier
                                        .fillMaxSize()
                                        .background(MaterialTheme.colors.onBackground)
                                ) {
                                    when (TabCategory.values()[index]) {
                                        TabCategory.Opinion -> { }
                                        TabCategory.Information -> { }
                                        TabCategory.Videos -> { }
                                    }
                                }
                            }

在您的视图模型中,创建一个 pagerState 并监视其当前页面:

class MyViewModel : ViewModel() {

    val pagerState = PagerState()

    init {
        viewModelScope.launch {
            snapshotFlow { pagerState.currentPage }.collect { page ->
                // Page is the index of the page being swiped.
            }
        }
    }
}

在您的可组合项中,使用 pagerState:

HorizontalPager(
  state = myViewModel.pagerState,
) { page ->

}

A PagerState 有一个 InteractionSource 跟踪那些东西。 collectIsDraggedAsState returns 您可以订阅的 State<Boolean> 方法通过 .value.

公开其当前值

这似乎测试得很好。

@Composable
fun ExampleComposable(){
    val pagerState=rememberPagerState()
    val isDragged=pagerState.interactionSource.collectIsDraggedAsState()
    HorizontalPager(count = injector.snippets.size,
    state = pagerState,
    ){index->
         MyFancyExampleComposable(index)
         if (isDragged.value){
              respondToPageSwipeOrPartialPageSwipe()
            }

     }
}