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