zoukankan      html  css  js  c++  java
  • 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. }  
  • 相关阅读:
    LeetCode 81 Search in Rotated Sorted Array II(循环有序数组中的查找问题)
    LeetCode 80 Remove Duplicates from Sorted Array II(移除数组中出现两次以上的元素)
    LeetCode 79 Word Search(单词查找)
    LeetCode 78 Subsets (所有子集)
    LeetCode 77 Combinations(排列组合)
    LeetCode 50 Pow(x, n) (实现幂运算)
    LeetCode 49 Group Anagrams(字符串分组)
    LeetCode 48 Rotate Image(2D图像旋转问题)
    LeetCode 47 Permutations II(全排列)
    LeetCode 46 Permutations(全排列问题)
  • 原文地址:https://www.cnblogs.com/xgjblog/p/7504221.html
Copyright © 2011-2022 走看看