当 ViewPager 内的 LazyRow 滚动到末尾时,它会将 ViewPager 滚动到下一页

问题描述 投票:0回答:1

我有一个包含两个页面的 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

android android-viewpager android-jetpack-compose lazycolumn
1个回答
0
投票

有一种方法可以防止影响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>

© www.soinside.com 2019 - 2024. All rights reserved.