SrcollView嵌套Recycler所遇到的Bug

来源:互联网 发布:西瓜影音播放网络文件 编辑:程序博客网 时间:2024/06/08 06:40

很久没有更新博客,并不是忘了,而是到了新公司,一直在忙着做公司的产品。

趁着测试测试的功夫,来写写,记录一下这几个月当中开发遇到的一些问题,以及解决方法吧。

一、ScrollView嵌套RecyclerView时的滑动冲突:

我相信对于大多数开发者而言,都遇到过这种问题吧。一个布局当中不光只有一个RecyclerView,有可能还有其他的View,当RecyclerView滚动的时候,要当View跟着其一起滚动。当时在做这块的时候,想当然的就是一个:

<ScrollView>

<LinearLayout>

<View/>

<RecyclerView/>

</LinearLayout>

</ScrollView>

写出来之后,随手拿了一个手机进行测试,哎,没毛病,就继续搬砖了。。。谁知道到后来测试给我提了一个bug,类似

仔细看了一下,心想还有这种操作?

分析了一下我的布局,类似这样:


这个时候才发现,啊,原来是这样啊。之前也遇到过这样的问题,一直没有放在心上,这里再遇到这个问题,就把这个问题写在博客里面吧。

ScrollView,在其内部当中还有一个需要滚动的视图是,如果单单只是一个RecyclerView的话,貌似也不需要ScrollView,关键在于ScrollView里面嵌套的是一个子布局,子布局当中有RecyclerView和其他布局的时候,这个时候,当你滑动RecyclerView时,ScrollView滑动时

内部的RecyclerView会拦截外部的滑动时间,移到其内部进行解决。这个时候,我们想到的办法有那些呢:

1,重写RecyclerView的onTouch方法

2,换外部的滑动控件


这里我采用的是第二种方法,即将ScrollView换成NestedScrollView,再来看一下效果:


哎,好像可以了,但是呢,细心一点有没有发现问题,当你滑动页面的时候,变得特别的卡顿,页面不流畅。

不着急,在代码中再加入一行代码即可:

mRecycler.setNestedScrollingEnabled(false);
再来看下效果:


毫无卡顿,大功告成,是不是~

这里再说一句,当你的RecyclerView设置到这行代码的时候,你的RecyclerView就失去了复用的功能,即这里只适用于你的RecyclerView条目不是很多的情况下,不然的话会很占内存,有可能会导致你的程序内存溢出,最好的方式还是去重写SrcollView或者内部RecyclerView的onTouch方法。

好了,第一个bug就先介绍到这里。大家工作愉快~

原创粉丝点击