根据已上线的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>

Android在开发中的使用技巧之解决ScrollView嵌套RecyclerView出现的系列问题的更多相关文章

  1. Android 解决ScrollView嵌套RecyclerView导致滑动不流畅的问题

    最近做的项目中遇到了ScrollView嵌套RecyclerView,刚写完功能测试,直接卡出翔了,后来通过网上查找资料和 自己的实践,找出了两种方法解决这个问题. 首先来个最简单的方法: recyc ...

  2. ios开发中的小技巧

    在这里总结一些iOS开发中的小技巧,能大大方便我们的开发,持续更新. UITableView的Group样式下顶部空白处理 //分组列表头部空白处理 UIView *view = [[UIViewal ...

  3. iOS开发中调试小技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

  4. Android应用开发中关于this.context=context的理解

    在Android应用开发中,有的类里面需要声明一个Context的成员变量,然后还需要在该类的构造函数中加上this.context=context;这行代码.为什么要这么写呢?不写不行么? 先看下面 ...

  5. Android学习开发中如何保持API的兼容

    Android学习开发中如何保持API的兼容: 1,采用良好的设计思路 在设计过程中,如果能按照下面的方式来进行设计,会让这个API生命更长久 面向用例的设计,收集用户建议,把自己模拟成用户,保证AP ...

  6. Android应用开发中三种常见的图片压缩方法

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap com ...

  7. iOS - 开发中调试小技巧

    对于软件开发而言,调试是必须学会的技能,重要性不言而喻.对于调试的技能,基本上是可以迁移的,也就是说你以前在其他平台上掌握的很多调试技巧,很多也是可以用在iOS开发中.不同语言.不同IDE.不同平台的 ...

  8. Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听

    原文:Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听 简单记录下android 盒子开发遥控器的监听 ,希望能帮到新入门的朋友们 不多说,直接贴代码 public cla ...

  9. java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...

随机推荐

  1. jquery 中remove()与detach()的区别

    remove()与detach()方法都是从dom中删除所有的元素 两者的共同之处在于都不会把匹配的元素从jQuery对象中删除. 不同之处在于用remove()删除的元素,除了元素被保留,其他的在这 ...

  2. xhprof扩展安装与使用

    目录 一.xhprof扩展安装步骤 二.xhprof的使用 总结 参考资料 一.xhprof扩展安装步骤 xhprof是PHP的一个扩展,最好也直接安装上graphviz图形绘制工具(用于xhprof ...

  3. C++语言实现-邻接矩阵

    一. 图的概念 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合.在图中的数据元素,我们称之为顶点( ...

  4. 针对SSL/TLS的拒绝服务攻击以及使用ettercap进行DNS欺骗

    一. thc-ssl-dos 1.简介 (1).SSL 协商加密对性能开销增加,大量握手请求会导致 DOS (2).利用 SSL secure Renegotiation 特性,在单一 TCP 连接中 ...

  5. 003.Docker容器管理

    一 docer运行应用 1.1 常见容器运行 root@docker:~# docker #查看docker相关命令 root@docker:~# docker run -d -p 80:80 htt ...

  6. 为什么要使用getter/setter

    变量私有化的好处 1. 在setter中可以加入合法性检查,比如设置颜色的函数中,对于RGB颜色要判断其值在0~255之间. 2. 更新与被设置变量相关的其它变量的值,比如在一个潜水艇模拟系统中,改变 ...

  7. Wamp修改端口

    WAMP装好之后默认的端口是80,但是这个80端口呢,可以热门端口啊,迅雷,IIS都挺喜欢,在WIN7下本来还有1个进程也点80,让人伤脑筋啊,所以把它改掉,方法如下: 一.修改APACHE的监听端口 ...

  8. loj#2013. 「SCOI2016」幸运数字 点分治/线性基

    题目链接 loj#2013. 「SCOI2016」幸运数字 题解 和树上路径有管...点分治吧 把询问挂到点上 求出重心后,求出重心到每个点路径上的数的线性基 对于重心为lca的合并寻味,否则标记下传 ...

  9. BZOJ.4653.[NOI2016]区间(线段树)

    BZOJ4653 UOJ222 考虑二分.那么我们可以按区间长度从小到大枚举每个区间,对每个区间可以得到一个可用区间长度范围. 我们要求是否存在一个点被这些区间覆盖至少\(m\)次.这可以用线段树区间 ...

  10. 线性代数与Python

    1.向量1.1向量例子1.2向量加法与减法1.3向量的乘法2.矩阵2.1矩阵例子2.2矩阵的形状2.3矩阵的创建函数 1.向量 向量是指可以加总(以生成新的向量),可以乘以标量(即数字),也可以生成新 ...