Android Scrollview嵌套RecyclerView导致滑动卡顿问题解决

一个比较长的界面一般都是Scrollview嵌套RecyclerView来解决.不过这样的UI并不是我们开发人员想看到的,实际上嵌套之后.因为Scrollview和RecyclerView都是滑动控件.会有一点滑动上的冲突.导致滑动起来有些卡顿.这个时候.我们重写一下LayoutManager就行了

例如:

 

[java]  view plain  copy
 
  1. LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false) {  
  2.         @Override  
  3.         public boolean canScrollVertically() {  
  4.             return false;  
  5.         }  
  6.     };  
  7.     recyclerview.setLayoutManager(linearLayoutManager);  
  8.     recyclerview.setAdapter(tempCommonAdapter);  

如此.禁止掉RecyclerView的滑动.就能一如既往的流畅了
 

问题现象:

一个界面有多个RecyclerView或者其他超过一屏显示的一些内容时,就需要要上下滚动了,就会需要在外面嵌套一个ScrollView,但是滑动过程不是很顺畅,有卡顿的感觉。

解决方案:

禁止RecyclerView的滑动。

 

最简单便捷的方法就是
[java]  view plain  copy
 
  1. linearLayoutManager = new LinearLayoutManager(context) {  
  2.     @Override  
  3.     public boolean canScrollVertically() {  
  4.         return false;  
  5.     }  
  6. };  

另外就是重写LayoutManager了,以Grid模式举例说明:

 

 

[java]  view plain  copy
 
  1. public class ScrollGridLayoutManager extends GridLayoutManager {  
  2.     private boolean isScrollEnabled = true;  
  3.     public ScrollGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {  
  4.         super(context, attrs, defStyleAttr, defStyleRes);  
  5.     }  
  6.   
  7.     public ScrollGridLayoutManager(Context context, int spanCount) {  
  8.         super(context, spanCount);  
  9.     }  
  10.   
  11.     public ScrollGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {  
  12.         super(context, spanCount, orientation, reverseLayout);  
  13.     }  
  14.   
  15.     public void setScrollEnabled(boolean flag) {  
  16.         this.isScrollEnabled = flag;  
  17.     }  
  18.   
  19.     @Override  
  20.     public boolean canScrollVertically() {  
  21.         //Similarly you can customize "canScrollHorizontally()" for managing horizontal scroll  
  22.         return isScrollEnabled && super.canScrollVertically();  
  23.     }  
  24. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值