Android SwipeRefreshLayout使用ViewPager拦截

Android SwipeRefreshLayout使用ViewPager拦截,android,android-viewpager,swiperefreshlayout,Android,Android Viewpager,Swiperefreshlayout,我有一个包装在SwiperFreshLayout中的ViewPager。 有时,当我向左/向右滑动时,会触发SRL get。这通常发生在我处于片段顶部时 我如何解决这个问题?为了在特定时间内禁用SRL,我是否需要监听某种事件? 我真的没有发现任何关于它的东西,所以我怀疑这是谷歌的一个真正的bug,但我是否实现了一些错误的东西?有什么想法吗 这就是我的布局: <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/

我有一个包装在SwiperFreshLayout中的ViewPager。 有时,当我向左/向右滑动时,会触发SRL get。这通常发生在我处于片段顶部时

我如何解决这个问题?为了在特定时间内禁用SRL,我是否需要监听某种事件? 我真的没有发现任何关于它的东西,所以我怀疑这是谷歌的一个真正的bug,但我是否实现了一些错误的东西?有什么想法吗

这就是我的布局:

<android.support.v4.widget.SwipeRefreshLayout
    android:id="@+id/mainSwipeContainer"
    android:layout_width="wrap_content"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/mainViewPager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</android.support.v4.widget.SwipeRefreshLayout>


谢谢!如果我遗漏了任何信息,请告诉我

我设法解决了这个问题:

mainViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mainTabLayout)
    @Override
    public void onPageScrollStateChanged(int state) {
        toggleRefreshing(state == ViewPager.SCROLL_STATE_IDLE);
    }
});
然后,您的toggleRefreshing()应该如下所示:

public void toggleRefreshing(boolean enabled) {
    if (swipeRefreshLayout != null) {
        swipeRefreshLayout.setEnabled(enabled);
    }
}

检查页面滚动状态是一种很好的方法,但是当用户更改页面时,动画微调器将消失,这是不好的

要解决此问题,请执行以下操作:

viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout) {
    @Override
    public void onPageScrollStateChanged(int state) {
        if (swipeRefreshLayout != null && !swipeRefreshLayout.isRefreshing()) {
            swipeRefreshLayout.setEnabled(state == ViewPager.SCROLL_STATE_IDLE);
        }
    }
});

灵感来源于@Crosswind和@Gombal:kotlin ViewPager2扩展功能解决方案

binding.topViewPager.ignorePullToRefresh(binding.swiperRefreshLayout)
有趣的视图页面2.ignorePullToRefresh(swipeRefreshLayout:swipeRefreshLayout){
this.registerOnPageChangeCallback(对象:ViewPager2.OnPageChangeCallback()){
覆盖页面滚动状态更改(状态:Int){
super.onPageScrollStateChanged(状态)
如果(!swipeRefreshLayout.isRefreshing){
swipeRefreshLayout.isEnabled=状态==滚动\状态\空闲
}
}
})
}

在内部设置的片段内部使用SwipeRefreshLayoutViewPager@DhawalSodhaParmar我曾经有过这样的功能,但是每次刷新都会刷新整个ViewPager,所以我想把它放在外面会更有意义!例如,如果我在一个选项卡上刷新,然后向右滚动,应用程序仍在刷新,但新选项卡上不会显示指示器。好主意!我被困在这个问题上了。实际上,我使用的是:swipeRefreshLayout.setEnabled(state!=ViewPager.SCROLL\u state\u drawing);但这个想法是真正得到了解决方案。精彩绝伦的解决方案!!Crosswind解决方案和alexwan02解决方案的组合非常有效。非常感谢各位。问题是,我对每个viewpager的页面有不同的滑动刷新布局
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout) {
    @Override
    public void onPageScrollStateChanged(int state) {
        if (swipeRefreshLayout != null && !swipeRefreshLayout.isRefreshing()) {
            swipeRefreshLayout.setEnabled(state == ViewPager.SCROLL_STATE_IDLE);
        }
    }
});