scrollview与viewpager处于同一层时滑动冲突

项目中,遇到了这个很恶心人的问题,以此记录下来,也方便大家:现在大都项目都是使用ViewPager搭配Fragment,当再一个Fragment中我想要实现布局的切换,如果使用Fragment再嵌套Framgent,逻辑复杂度及出现的Bug着实头疼,这时会选用Include的方式实现布局的GONE及Visibility切换。

我的项目中使用了一个fragment中同时包含两个include,一个include里包含viewpager2,另一个include里包含ScrollView。这是Bug就出现了,当Framgnet显示的是ViewPager1时,Fragment的父ViewPager1可以做滑动操作。但是当Fragment显示的是ScollView时,Fragment的父ViewPager1就没法做滑动操作。这是我的第一想法是改变ScrollView的事件分发。当X方向滑动距离大于Y方向滑动距离时,将事件传递给父ViewPager1,相反则放行,但是当运行之后发现,根本没卵用,ViewPage1虽然接收到了触摸事件,但就是不滑动。

最后各种测试发现原来是ViewPager2在捣鬼,当ViewPager2的Adapter中有Item时即使ViewPager2.setVisibility(View.GONE),ScrollView.setVisibility(View.Visibility)仍无法滑动。但当我将ScrollView.setVisibility(View.Visibility)时, 先将ViewPager2.setAdapter(Null)时,我的天,ScrollView横向滑动时,就可以触发ViewPager1的横向滑动了。这是我在回到ViewPager2时,将adapter重新添加到Viewpager2就可以了

你可能感兴趣的:(scrollview与viewpager处于同一层时滑动冲突)