Android开发中在ViewPager2中嵌套ViewPager2出现滑动问题的解决(文章内包含本人解决问题的经过)

在ViewPager2中嵌套ViewPager2出现滑动问题的解决

关于我为什么发这个文章,因为本人在网上直接找这类问题没有发现什么解决问题,直到发现了一篇ViewPager的文章中写到解决方法,其实本人一开始忘记了ViewPager2是继承ViewPager!

前言

​ 本人想先讲一下本人是如何发现和解决这个问题的,本人技术不强目前还在学。本人是在需要用一个ViewPager2中放几个Fragment,在第一个Fragment中需要弄上一个轮播图,这时本人实现轮播图也是用到了ViewPager2。当本人以为万无一失的时候,我一运行发现我不能对轮播图就行滑动,只能对不同的Fragment滑动,本人当时感觉心态炸裂!立马就去网上找问题,本人一开始找到有人说去继承ViewPager2但是本人去继承的时候发现ViewPager2是一个final类型的,然后又去找了找发现有方法好像可以但是太麻烦了。于是本人又去网上找啊找,找到了一篇文章,文章中看是有说使用 ‘setUserInputEnabled(false)’ 就可以交给子ViewPager(轮播图)处理了啥的,我看这个意思以为是只要控制这个的值就可以控制父ViewPager2和子ViewPager2(轮播图)的滑动,结果在本人多次尝试下发现,每次设置完需要对父ViewPager2进行操作比如滑动一下啊他才会生效我刚刚设置的 ‘setUserInputEnabled()’ 方法。
可是问题还是没解决呀他不能在我想滑动子ViewPager(轮播图)的时候可以滑动在想滑父ViewPager2的时候可以滑动。于是我又想着ViewPager2有没有什么可以刷新的方法之类的。结果找了半天也没找到,就在我一直烦恼的时候我发现了一个关于解决ViewPager2滑动冲突的文章后发现了 ‘requestDisallowInterceptTouchEvent()’ 这个方法,我不是很知道他的方法意思用法,但是本人理解的意思就是是否放行这次事件给子View去执行。主要本人在网上找的时候搜ViewPager2嵌套ViewPager2的时候没找到,或者是找了好几页好久才发现解决方法的。

​ 最后我想通过我的文章可以帮助那些和本人碰到一样问题的人可以快速的解决问题。
本人的轮播图实现是通过对轮播图图片的触碰事件,在通过获取到父ViewPager2来控制完成!

解决方法

利用ViewPager2中的requestDisallowInterceptTouchEvent(参数默认false)方法,这个方法

ViewPager2 vp2 = new ViewPager2();

vp2.requestDisallowInterceptTouchEvent(false) // 表示不放行这次事件给子View处理
vp2.requestDisallowInterceptTouchEvent(true); // 表示放行这次事件给子VIew处理

​ 下图就是本人要实现的嵌套

在这里插入图片描述

ViewPager嵌套ListView时,可能会遇到ListView无法滑动问题,这是因为ViewPager会拦截ListView滑动事件。解决方法如下: 1. 自定义ListView,重写其onInterceptTouchEvent()方法,返回false,让ViewPager不拦截ListView滑动事件。 ``` public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { final int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: setParentScrollAble(false); break; case MotionEvent.ACTION_UP: setParentScrollAble(true); break; } return super.onInterceptTouchEvent(ev); } private void setParentScrollAble(boolean flag) { getParent().requestDisallowInterceptTouchEvent(!flag); } } ``` 2. 在ViewPager的适配器,将ListView所在的布局设置为android:descendantFocusability="blocksDescendants",防止ListView获取焦点而导致ViewPager无法滑动。 ``` <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:descendantFocusability="blocksDescendants"> <com.example.MyListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout> ``` 以上两种方法都可以解决ViewPagerListView失效的问题
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是鱼染哟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值