关于我为什么发这个文章,因为本人在网上直接找这类问题没有发现什么解决问题,直到发现了一篇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处理
下图就是本人要实现的嵌套