zoukankan      html  css  js  c++  java
  • Android在开发中的使用技巧之解决ScrollView嵌套RecyclerView出现的系列问题

     

    根据已上线的app里总结出来的实用小技巧

    相信大家都遇到过ScrollView嵌套RecyclerView或者RecyclerView嵌套RecyclerView来使用, 也会遇到一堆奇奇怪怪的问题, 比如滑动卡顿、数据加载不完、数据加载完后没有停留在顶部等问题

    今天我们就来写一篇RecyclerView嵌套版本的解决方案

    • 今年六月份的IO大会把Kotlin用做Android开发的一级语言, 也让这个语言在Android开发圈子里大火了一把, 所以今天的代码是用Kotlin来实现(当然还是有Java版本的).

    • 由于Google公司大力推荐大家使用RecyclerView来代替ListViewGridView等等控件, 现在越来越多的开发者都已经上手了RecyclerView了.

    • 也推荐大家赶紧使用RecyclerView来代替ListView等等, 好处太多了也就不提了, 配合github上的一个开源工程使用简直绝配BaseRecyclerViewAdapterHelper

    进入正题, 不多BB了

    1. 第一种情况

    两层RecyclerView嵌套这种需求也是很常见的一个需求了, 下面图片就是列举的一个案例

     
    RecyclerView嵌套RecyclerView示例
    2.第二种情况

    一个页面中有个多个RecyclerView时,为了保证数据能完整加载, 一般都是在最外层加上一个ScrollView, 然而出现的一系列问题, 让人头大, 当然本文章也都提供了解决方案

     
    ScrollView嵌套两个RecyclerView示例

    之前也写过一篇ScrollView嵌套ListViewGridView等控件出现的各种问题的解决的最佳方案, 传送门点我

    • Java版本
    recyclerView.setLayoutManager(new LinearLayoutManager(this){
          @Override
          public boolean canScrollVertically() {
             //解决ScrollView里存在多个RecyclerView时滑动卡顿的问题
             //如果你的RecyclerView是水平滑动的话可以重写canScrollHorizontally方法
             return false;
          }
    });
    //解决数据加载不完的问题
    recyclerView.setNestedScrollingEnabled(false);
    recyclerView.setHasFixedSize(true);
    //解决数据加载完成后, 没有停留在顶部的问题
    recyclerView.setFocusable(false);
    
    • Koltin版本
    recyclerView.layoutManager = object : LinearLayoutManager(context) {
           //解决RecyclerView嵌套RecyclerView滑动卡顿的问题
           //如果你的RecyclerView是水平滑动的话可以重写canScrollHorizontally方法
          override fun canScrollVertically() = false
    }
    //解决数据加载不完的问题
    recyclerView.isNestedScrollingEnabled = false
    recyclerView.setHasFixedSize(true)
    //解决数据加载完成后, 没有停留在顶部的问题
    recyclerView.isFocusable = false
    
    • 切记,切记,切记, 重要的事情说三遍, 还解决不了的时候看这里

    关于嵌套后滑动卡顿或者焦点之类的问题
    使用了上面的方法还无法解决就把布局中的RecyclerView外层的ScrollView换成NestedScrollView就可以解决了

    大概就改成这样
    <android.support.v4.widget.NestedScrollView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
    
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical">
    
                        <android.support.v7.widget.RecyclerView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content" />
    
                        <android.support.v7.widget.RecyclerView
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content" />
                    </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
    
     
  • 相关阅读:
    spring揭秘读书笔记----spring的ioc容器之BeanFactory
    spring启动加载过程源码分析
    java线程数过高原因分析
    spring揭秘读书笔记----ioc的基本概念
    git merge rebase的区别及应用场景
    spring实现定时任务
    jetty.xml解析
    Hackthebox--------irked
    CTF之信息泄漏
    CTF web题型解题技巧
  • 原文地址:https://www.cnblogs.com/xgjblog/p/9719626.html
Copyright © 2011-2022 走看看