有这样一个需求,一个SlidingPaneLayout里面包裹了一个ViewGroup而他可以被多个Fragment添加

来源:互联网 发布:mac上类似美图秀秀 编辑:程序博客网 时间:2024/04/29 06:32

问题:

     一个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吧

0 0