We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
我们知道SwipeRefreshLayout是往下滑动触发刷新的 而ViewPager2(默认)是左右滑动来翻页的
当SwipeRefreshLayout遇到ViewPager2,则是体验灾难。
理论上的井水不犯河水! SwipeRefreshLayout是处理上下滑动操作,ViewPager2是处理左右滑动的,理论上大家个管个是完全不冲突的
实际上的体验 理想是丰满的,而现实是骨感的!事实上左右滑动确实会引起ViewPager2翻页,但是只要一点点的上下的位移就会引起翻页中断,理论上的水平垂直互动实际上并不容易实现!
这个问题已经放了一段时间了,现在基本上腾出手来清理各种犄角旮旯问题的时候了。 目标: 在滑动状态下,相关的事件不要“漏到”SwipeRefreshLayout里面去。
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mSwipe = view.findViewById(R.id.swipe_refresh); mSwipe.setColorSchemeResources(R.color.primary); this.spacePage = view.findViewById(R.id.space_page); this.bookingPage = view.findViewById(R.id.booking_page); this.visitorPage = view.findViewById(R.id.visitor_page); this.spacePage.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageScrollStateChanged(int state) { super.onPageScrollStateChanged(state); setSwipeEnable(state); } }); this.bookingPage.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageScrollStateChanged(int state) { super.onPageScrollStateChanged(state); setSwipeEnable(state); } }); this.visitorPage.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageScrollStateChanged(int state) { super.onPageScrollStateChanged(state); setSwipeEnable(state); } }); ... } /*** * 设置刷新工具的状态 * @param state 当时ViewPager2的滚动栏状态 */ private void setSwipeEnable( int state ){ this.mSwipe.setEnabled( state == ViewPager2.SCROLL_STATE_IDLE ); }
综合下来觉得这个方法最合适,直接把SwipeRefreshLayout控件封了,这样事件怎么都漏不到SwipeRefreshLayout的处理里面去了。 另外也不用在绑定里面处理,因为纯粹是View层的“内部矛盾”,不需要扩展到业务层
SwipeRefreshLayout + ViewPager, limit horizontal scroll only? StackOverflow的答案,不过是针对ViewPager的,不是ViewPager2,需要把addOnPageChangeListener改成registerOnPageChangeCallback,其他基本是一样的
Android解决SwipeRefreshLayout与ViewPager横向滑动冲突 这个解决方案是判断是横向移动大于纵向移动就不触发SwipeRefreshLayout刷新,解决一部分问题。但是我觉得没必要一定要在 ViewPager2里面处理SwipeRefreshLayout的事件,不如索性六根清净来的彻底
The text was updated successfully, but these errors were encountered:
No branches or pull requests
当SwipeRefreshLayout遇到ViewPager2
我们知道SwipeRefreshLayout是往下滑动触发刷新的
而ViewPager2(默认)是左右滑动来翻页的
当SwipeRefreshLayout遇到ViewPager2,则是体验灾难。
理论上的井水不犯河水!
SwipeRefreshLayout是处理上下滑动操作,ViewPager2是处理左右滑动的,理论上大家个管个是完全不冲突的
实际上的体验
理想是丰满的,而现实是骨感的!事实上左右滑动确实会引起ViewPager2翻页,但是只要一点点的上下的位移就会引起翻页中断,理论上的水平垂直互动实际上并不容易实现!
解决问题
这个问题已经放了一段时间了,现在基本上腾出手来清理各种犄角旮旯问题的时候了。
目标:
在滑动状态下,相关的事件不要“漏到”SwipeRefreshLayout里面去。
综合下来觉得这个方法最合适,直接把SwipeRefreshLayout控件封了,这样事件怎么都漏不到SwipeRefreshLayout的处理里面去了。
另外也不用在绑定里面处理,因为纯粹是View层的“内部矛盾”,不需要扩展到业务层
相关链接
SwipeRefreshLayout + ViewPager, limit horizontal scroll only?
StackOverflow的答案,不过是针对ViewPager的,不是ViewPager2,需要把addOnPageChangeListener改成registerOnPageChangeCallback,其他基本是一样的
Android解决SwipeRefreshLayout与ViewPager横向滑动冲突
这个解决方案是判断是横向移动大于纵向移动就不触发SwipeRefreshLayout刷新,解决一部分问题。但是我觉得没必要一定要在
ViewPager2里面处理SwipeRefreshLayout的事件,不如索性六根清净来的彻底
The text was updated successfully, but these errors were encountered: