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

上下观古今,起伏千万途。这篇文章主要讲述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的滑动。
【Android 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. }  


    推荐阅读