欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

BottomSheetBehavior+ViewPager+RecyclerView引起的滑动冲突事件解决

程序员文章站 2022-03-08 16:02:18
项目中,使用到抽屉+ViewPager,同时ViewPager中使用RecyclerView,这时会出现事件传递异常,最内侧的RecyclerView接收不到滑动事件,导致无法滑动。遇到问题,自然搜索,没想到搜索后,全网基本全是这篇文章的转载,BottomSheetBehavior的ViewPager嵌套RecyclerView滑动失效问题记录通过这篇文章启发去看了下源码,可以看到BottomSheetBehavior只支持内部有一个可以上下滑动的控件,多个的话就取第一个。截止到这里...

项目中,使用到抽屉+ViewPager,同时ViewPager中使用RecyclerView,这时会出现事件传递异常,最内侧的RecyclerView接收不到滑动事件,导致无法滑动。

遇到问题,自然搜索,没想到搜索后,全网基本全是这篇文章的转载,

BottomSheetBehavior的ViewPager嵌套RecyclerView滑动失效问题记录

BottomSheetBehavior+ViewPager+RecyclerView引起的滑动冲突事件解决

通过这篇文章启发去看了下源码,可以看到BottomSheetBehavior只支持内部有一个可以上下滑动的控件,多个的话就取第一个。

BottomSheetBehavior+ViewPager+RecyclerView引起的滑动冲突事件解决

截止到这里,那篇文章的解决办法比较含糊,反正我是没有解决掉,于是又打开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