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

在Android开发中,遇到一个问题:SlidingPaneLayout包含多个Fragment,每个Fragment内部有ViewPager。当ViewPager的CurrentItem不为0时,允许SlidingPaneLayout左滑。解决方法是继承SlidingPaneLayout,重写onInterceptTouchEvent方法。通过查找ViewGroup和ViewPager,判断CurrentItem,若不为0则不拦截滑动事件。同时,通过Fragment的setTag()和getTag()方法,可以在SlidingPaneLayout中获取并检查Fragment的状态,从而实现事件的正确分发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值