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

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

例如:

  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的滑动。

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

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

  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. public ScrollGridLayoutManager(Context context, int spanCount) {
  7. super(context, spanCount);
  8. }
  9. public ScrollGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) {
  10. super(context, spanCount, orientation, reverseLayout);
  11. }
  12. public void setScrollEnabled(boolean flag) {
  13. this.isScrollEnabled = flag;
  14. }
  15. @Override
  16. public boolean canScrollVertically() {
  17. //Similarly you can customize "canScrollHorizontally()" for managing horizontal scroll
  18. return isScrollEnabled && super.canScrollVertically();
  19. }
  20. }
上一篇:[Poco库]使用经验


下一篇:chrome设置可以跨域访问