recyclerview

Android优化之RecyclerView优化

元气小坏坏 提交于 2019-11-29 23:28:38
RecyclerView优化 1 页面为何卡顿 RecyclerView滑动卡顿的原因有哪些? 第一种:嵌套布局滑动冲突 导致嵌套滑动难处理的关键原因在于当子控件消费了事件, 那么父控件就不会再有机会处理这个事件了, 所以一旦内部的滑动控件消费了滑动操作, 外部的滑动控件就再也没机会响应这个滑动操作了 第二种:嵌套布局层次太深,比如六七层等 测量,绘制布局可能会导致滑动卡顿 第三种:比如用RecyclerView实现画廊,加载比较大的图片,如果快速滑动,则可能会出现卡顿,主要是加载图片需要时间 第四种:在onCreateViewHolder或者在onBindViewHolder中做了耗时的操作导致卡顿。按stackoverflow上面比较通俗的解释:RecyclerView.Adapter里面的onCreateViewHolder()方法和onBindViewHolder()方法对时间都非常敏感。类似I/O读写,Bitmap解码一类的耗时操作,最好不要在它们里面进行。 2 具体优化方案 03.SparseArray替代HashMap 04.瀑布流图片错乱问题解决 05.item点击事件放在哪里优化 06.ViewHolder优化 07.连续上拉加载更多优化 08.拖拽排序与滑动删除优化 09.暂停或停止加载数据优化 11.异常情况下保存状态 12.多线程下插入数据优化 14

Android Material风格的应用(二)--RecyclerView

北慕城南 提交于 2019-11-29 22:44:40
添加RecyclerView Android Material风格的应用(一)--AppBar TabLayout Android Material风格的应用(二)--RecyclerView Android Material风格的应用(三)--DrawerLayout Android Material风格的应用(四)--FloatActionButton Android Material风格的应用(五)--CollapsingToolbar 工程源码 添加对应的支持库 compile 'com.android.support:recyclerview-v7:24.2.1' compile 'com.android.support:cardview-v7:24.2.1' 添加 res/layout/recycler_view.xml <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"

RecyclerView实现网格布局,仿应用列表

落花浮王杯 提交于 2019-11-29 21:26:15
简介 使用RecyclerView实现网格布局,实现手机界面应用列表 效果 效果如下图: 详细代码 XML布局文件 在布局中使用RecyclerView控件 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" android:background="#9709F7"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout

Android RecyclerView 滑动删除例子

戏子无情 提交于 2019-11-29 11:55:59
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/xiexuan2007/article/details/53156916 效果图 1.自定义Item容器View,SlidingButtonView.java package com.android.mx.myapplication; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.HorizontalScrollView; import android.widget.TextView; /** * Created by Administrator on 2016-11-11. */ public class SlidingButtonView extends HorizontalScrollView { private TextView mTextView_Delete; private int mScrollWidth;

即刻App详情页滑动效果,SlideLayout双列表页面实现

久未见 提交于 2019-11-29 09:05:33
原文链接: https://www.jianshu.com/p/6e784f5a32e5 即刻 5.3 版本的时候,随着圈子详情页的内容越来越丰富,之前的页面结构已经不能满足我们的需求,需要一个新的布局方案承载各种圈子元素并满足我们的自定义交互。 改版前 改版前的结构比较简单,头部显示圈子的基本信息比如图片、标题和简介等信息,底部展示圈子内的消息列表,向上滑动可折叠头部区域让用户更加专注地浏览消息列表,结构如下: CoordinatorLayout 作为容器负责两部分的布局和联动滑动, AppBarLayout 负责展示头部信息,底部通过 ViewPager 和 Fragment 实现多 tab 页面, Fragment 内部通过 RecyclerView 实现消息列表。 改版后: 改版后头部新增了一些元素比如插件、创建者,原有的元素展示区域扩大,导致头部高度增大。使得用户刚进入圈子页时几乎看不到消息列表区域,为了解决这个问题我们需要页面支持快速地在头部和列表之间切换,并且当头部超过一屏时也可以滑动。简单总结下我们的需求: 1、当头部信息较少,即没有达到一屏时表现和原有实现一致,头部随列表滑动可以折叠。 2、当头部信息较多,即超过一屏时除了头部随着列表滑动折叠外,还可以在头部和列表之间快速切换。 解决方案 第一条需求原有的 CoordinatorLayout 就可以支持

自定义控件三部曲视图篇(四)——RecyclerView系列之一简单使用

走远了吗. 提交于 2019-11-29 04:02:07
绝望的时候不要那么绝望,高兴的时候不要那么高兴,是你慢慢会学会的。 ——董卿 系列文章: Android自定义控件三部曲文章索引: http://blog.csdn.net/harvic880925/article/details/50995268 转了一年多,又回来继续做Android。果然还是看到代码最让我兴奋……但有些事,没经历过,总归还是遗憾的。在VIVO的游戏中心,有一个特别炫酷的功能: 这个功能就是使用RecyclerView来实现的,在本系列中,我们将最终制作出这样的一个效果出来。 一、导入Support-v7包 工欲善其事必先利其器,RecyclerView存在于support-v7包中,我们需要在新建的gradle工程中导入support-v7包: compile 'com.android.support:recyclerview-v7:21.0.3' gralde 版本较高的同学,会发现compile关键字这里会报警告,在高版本gradle中compile已经弃用了,改成了implementation,所以你可以改为: implementation 'com.android.support:recyclerview-v7:21.0.3' 加上上面的依赖代码以后,会发现根本不好使,依赖库根本拉不下来。这是为什么呢? support

RecyclerView setHasFixedSize(true); 的作用

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 19:30:38
下文翻译:RecyclerView的尺寸在每次改变时,比如你加任何些东西。setHasFixedSize 的作用就是确保尺寸是通过用户输入从而确保RecyclerView的尺寸是一个常数。RecyclerView 的Item宽或者高不会变。每一个Item添加或者删除都不会变。如果你没有设置setHasFixedSized没有设置的代价将会是非常昂贵的。因为RecyclerView会需要而外计算每个item的size, void onItemsInsertedOrRemoved() { if (hasFixedSize) layoutChildren(); else requestLayout(); } 原文 RecyclerView size changes every time you add something no matter what. What setHasFixedSize does is that it makes sure (by user input) that this change of size of RecyclerView is constant. The height (or width) of the item won't change. Every item added or removed will be the same. If you

android RecyclerView的Grid布局案例

荒凉一梦 提交于 2019-11-28 12:54:07
1、先创建activity_grid.xml 和 activity_grid_item.xml <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".GridActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv2" android:layout_width="match_parent" android:layout_height="match_parent" tools:layout_editor_absoluteX="103dp" tools:layout_editor

RecyclerView缓存原理

心不动则不痛 提交于 2019-11-28 07:11:48
RecyclerView缓存机制 1. RecyclerView缓存机制与性能优化关系 RecyclerView做性能优化要说复杂也复杂,比如说布局优化,缓存,预加载等等。其优化的点很多,在这些看似独立的点之间,其实存在一个枢纽:Adapter。因为所有的ViewHolder的创建和内容的绑定都需要经过Adaper的两个函数 onCreateViewHolder和onBindViewHolder 。 因此我们性能优化的本质就是要 减少这两个函数的调用时间和调用的次数 。如果我们想对RecyclerView做性能优化,必须清楚的了解到我们的每一步操作背后,onCreateViewHolder和onBindViewHolder调用了多少次。因此,了解RecyclerView的缓存机制是RecyclerView性能优化的基础。 为了理解缓存的应用场景,本文首先会简单介绍一下RecyclerView的绘制原理,然后再分析其缓存实现原理。 2. 绘制原理简述 2.1 假设 为了简化问题,绘制原理介绍提供以下假设: RecyclerView 以LinearLayoutManager为例 忽略ItemDecoration 忽略ItemAnimator 忽略Measure过程 假设RecyclerView的width和height是确定的 Recycler

RecyclerView 缓存机制详解

一世执手 提交于 2019-11-28 07:06:15
一 前言 RecyclerView据官方的介绍,该控件用于在有限的窗口中展示大量数据集,其实这样功能的控件我们并不陌生,例如:ListView、GridView。RecyclerView可以用来代替传统的ListView,GridView,更加强大和灵活。RecyclerView的使用网上有非常多案例,这里就不多说了,我们今天主要来看看RecyclerView 的缓存机制。 二 缓存机制Recycler详解 Recycler是RecyclerView的一个内部类。我们来看一下它的主要的成员变量。 mChangedScrap 表示数据已经改变的ewHolder列表 mAttachedScrap 未与RecyclerView分离的ViewHolder列表 mCachedViews ViewHolder缓存列表,其大小由mViewCacheMax决定,默认DEFAULT_CACHE_SIZE为2,可动态设置。 mViewCacheExtension 开发者可自定义的一层缓存,是虚拟类ViewCacheExtension的一个实例,开发者可实现方法getViewForPositionAndType(Recycler recycler, int position, int type)来实现自己的缓存。 mRecyclerPool ViewHolder缓存池