问题:
一个SlidingPaneLayout中包裹多个Fragment而多个Fragment中的布局中又存在ViewPager这时会出现你左滑时无法滑动ViewPager中的数据
要求:
但ViewPager中CurrentItem不为0时就可向左滑。
实现:
其实就是出现事件冲突,解决的办法有很多。我来说下我的思路:
写个类继承SlidingPaneLayout重写它的onInterceptEvent方法。我们只想要知道Viewpager.getCurrentItem为0吗如果不为0就return false;表示不拦截
问题在如何获取ViewPager。。。。因为ViewPager在其中的一个Fragment布局中:
View View = findeViewBy(R.id.content);//这里获取是SlidingPaneLayout中的要设置上Fragment的ViewGroup(ViewGroup extends View)
然后我们
ViewPager viewPager = view.findView(R.id.viewPager);//获取那个fragment布局中ViewPager
if(viewPager!=null&&viewPager.getCurrentItem()!=0)//注意这里一定要判断ViewPager是否为空,因为但加载的不是那个Fragment时就会为null
return false;
很多人到这里还是不明白为啥可以
SilingPaneLayout-----ViewGroup(Fragment)--------ViewPager
它的结构如上silingPaneLayout中又个ViewGroup(Fragment)而Fragment中又ViewPager
补充点:
其实可以不用获取ViewGroup直接使用findView(。。。)//里面填入Fragment中ViewPager中的Id
我做的项目中有个多个Fragment,并且有多个Fragment中存在VewPager控件。而且我添加这些Fragment都是填加,要显示的就
show 不显示就hidden
1.将不同Fragment中ViewPager中的id设置成唯一
2.在它们相应的Fragment中先获取ViewPager对象调用 viewPager.setTag(this)把fragment对象设置上去
3.在SlidingPaneLayout的onInterceptEvent中先获取对象的ViewPager 在调用getTag()获取上面设置上去的Fragment
如果Fragment为显示状态并且viewPager.getCurrentItem()!=0 SlidingPaneLayout就不拦截
这里为啥可以在Fragment的ViewPager设置Fragment后,SlingPaneLayout中又可以获取?
能进行事件分发说明它的绘制已经完成,再就行布局时显示ViewGroup再传递到子View吧