我有一个包含两个页面的 ViewPager,每个页面内都有一个显示任务列表的 LazyColumn。在这些任务上方的 LazyColumn 中,我有一个 LazyRow 项目,它显示任务的排序选项。当 LazyRow 滚动到末尾时,ViewPager 也随之滚动到下一页,但我不希望 LazyRow 的滚动影响 ViewPager 的滚动。
这是我解决问题的尝试,它大多数时候停止滚动,但有时仍然滚动一点:
1 - 我定义了一个名为“viewPagerShouldScroll”的顶级可变状态变量。
2 - 在 LazyRow 里面:
LaunchedEffect(key1 = lazyRowState.interactionSource){
lazyRowState.interactionSource.interactions.collect{
viewPagerShouldScroll = it !is DragInteraction.Start
}
}
也是这个,但是当 LazyRow 到达最后一个可见项目时,它不起作用:
viewPagerShouldScroll = lazyListState.!isScrollInProgress
有一种方法可以防止影响ViewPager的滚动。您可以将 LazyColumn 包装到拦截触摸事件的传统自定义视图中。传统的解决方案是NestedScrollableHost。 例如:
<cn.adp.appmarket.widget.NestedScrollableHost xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<cn.adp.appmarket.widget.SpecialComposeView
android:id="@+id/mComposer"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</cn.adp.appmarket.widget.NestedScrollableHost>