BottomSheetBehavior+ViewPager+RecyclerView引起的滑动冲突事件解决
项目中,使用到抽屉+ViewPager,同时ViewPager中使用RecyclerView,这时会出现事件传递异常,最内侧的RecyclerView接收不到滑动事件,导致无法滑动。
遇到问题,自然搜索,没想到搜索后,全网基本全是这篇文章的转载,
BottomSheetBehavior的ViewPager嵌套RecyclerView滑动失效问题记录
通过这篇文章启发去看了下源码,可以看到BottomSheetBehavior只支持内部有一个可以上下滑动的控件,多个的话就取第一个。
截止到这里,那篇文章的解决办法比较含糊,反正我是没有解决掉,于是又打开Google。
下面进入问题解决:
一,搜索到这篇文章:android - 带有RecyclerView的Android ViewPager在BottomSheet中工作不正常
这篇文章其实是对Stack Overflow一个问题最佳答案的整理,Android ViewPager with RecyclerView works incorrectly inside BottomSheet。解决办法是有大神根据BottomSheetBehavior优化了只获取一个可滑动控件的问题,并上传了git。到这里,大家其实去看这两篇文章,或者去 ViewPagerBottomSheet 这个git,看里面的示例 应该就能够解决问题了。
二,具体引用
1,在项目根目录下的build.gradle中添加以下代码;
repositories {
maven { url "https://raw.github.com/laenger/maven-releases/master/releases" }
}
2,在项目主Module中,一般是app/build.gradle中,添加依赖;
dependencies {
implementation "biz.laenger.android:vpbs:0.0.6"
}
3,在你调用抽屉BottomSheetBehavior处的布局文件中,引用替换为
app:layout_behavior="@string/view_pager_bottom_sheet_behavior"
4,在你代码中获取ViewPager对象后,添加以下代码
BottomSheetUtils.setupViewPager(bottomSheetViewPager)
5,记得之前引用的BottomSheetBehavior全部改为ViewPagerBottomSheetBehavior
三,以上步骤完成后,就完成引用了,这是编译运行项目
1,可能会报资源找不到的情况,你只要把你的app/build.gradle文件中的
compileSdkVersion修改为29,这个29我是看示例文档中知晓的。
2,记得还有一个编译异常com.android.builder.dexing.DexArchiveBuilderException,这个在app/build.gradle文件android{}中添加以下代码。
如果还有其他编译问题,在搜索下解决即可。
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
至此,这个BottomSheetBehavior+ViewPager+RecyclerView引起的滑动冲突事件,解决。
吐槽一下:CSDN编辑器没找到格式化功能,排版不好看,大家见谅。
本文地址:https://blog.csdn.net/wjw_java/article/details/107207977
推荐阅读
-
JS中双击和单击事件冲突的解决方法
-
JS中touchstart事件与click事件冲突的解决方法
-
Android 中SwipeRefreshLayout与ViewPager滑动事件冲突解决方法
-
Android的事件分发机制以及滑动冲突的解决方案
-
搜索提示时jquery的focusout和click事件冲突问题完美解决 搜索提示智能提示focusoutclick事件冲突
-
解决layui中的form表单与button的点击事件冲突问题
-
Android WebView与下拉刷新控件滑动冲突的解决方法
-
JS中双击和单击事件冲突问题的解决办法
-
BottomSheetBehavior+ViewPager+RecyclerView引起的滑动冲突事件解决
-
解决Flutter的ListView嵌套ListView滑动冲突以及无限高度问题