LayoutManager

【RecyclerView优化】

不想你离开。 提交于 2021-02-17 16:22:46
1.局部刷新 ( 1)避免整个列表的数据更新 ,只更新受影响的布局。例如,加载更多时,不使用 notifyDataSetChanged() ,而是使用 notifyItemRangeInserted(rangeStart, rangeEnd) 补充:recyclerView.adapter的刷新: 刷新全部可见的item,notifyDataSetChanged() 刷新指定item,notifyItemChanged(int) position数据发生了改变,那调用这个方法,就会回调对应position的onBindViewHolder()方法了,当然,因为ViewHolder是复用的,所以如果position在当前屏幕以外,也就不会回调了,因为没有意义,下次position滚动会当前屏幕以内的时候同样会调用onBindViewHolder()方法刷新数据了。其他的方法也是同样的道理。 从指定位置开始刷新指定个item,notifyItemRangeChanged(int,int) 顾名思义,可以刷新从positionStart开始itemCount数量的item了(这里的刷新指回调onBindViewHolder()方法)。 插入、移动一个并自动刷新,notifyItemInserted(int)、notifyItemMoved(int)、notifyItemRemoved

Android控件RecyclerView的基本用法

天大地大妈咪最大 提交于 2020-12-21 20:05:48
Android控件RecyclerView的基本用法 转 https://www.jianshu.com/p/e71a4b73098f github: https://github.com/CymChad 前言:虽然在日常开发中已经多次接触过RecycleView,但也只是用到其最基本的功能,并没有深入研究其他内容。接下来将抽出时间去了解RecycleView的相关内容,同时在博客中进行记录,以此加深印象。这篇文章主要是介绍RecycleView的使用方法。 一、RecyclerView是什么 RecycleView是Android5.0后谷歌推出的一个用于在有限的窗口中展示大量数据集的控件,位于support-v7包中。它可以实现与ListView和GridView一样的效果,提供了一种插拔式的体验,高度的解耦,异常的灵活,只需设置其提供的不同的LayoutManager,ItemAnimator和ItemDecoration,就能实现不同的效果。 二、RecyclerView的优点 1、支持局部刷新。 2、可以自定义item增删时的动画。 3、能够实现item拖拽和侧滑删除等功能。 4、默认已实现View的复用,而且回收机制更加完善。 三、RecyclerView的使用方法 首先要在build.gradle文件中添加引用 compile 'com.android.support

阿里3轮面试都问了RecyclerView

天大地大妈咪最大 提交于 2020-08-18 14:46:18
最强面试题推荐: 2020Java面试题及答案,命中率高达90% 阿里面试总共4轮,其中有3轮面试都问到了RecyclerView的问题。面试的点各不相同,有原理、嵌套问题、有缓存实现,但是最终都是殊途同归,所有的问题都汇集在 如何对RecyclerView做性能优化? RecyclerView第一次layout时,会发生预布局pre-layout吗? 第一次布局时,并不会触发pre-layout。pre-layout只会在每次notify change时才会被触发,目的是通过saveOldPosition方法将屏幕中各位置上的ViewHolder的坐标记录下来,并在重新布局之后, 通过对比实现Item的动画效果 。比如以下效果: 如果自定义LayoutManager需要注意什么? 在RecyclerView的dispatchLayoutStep1阶段,会调用自定义LayoutManager的 supportsPredictiveItemAnimations 方法判断在某些状态下是否展示predictive animation。以下LinearLayoutManager的实现: @Override public boolean supportsPredictiveItemAnimations() { return mPendingSavedState == null &&

纯干货Android知识点整理(一)

为君一笑 提交于 2020-08-14 05:42:36
最近整理了一些Android中的知识点,纯干货,偷偷告诉你,这也是面试的高频面试题哦。 1.解决 Android 多进程导致 Application 重复创建问题(process 造成多个 Application) http://conorlee.top/2017/02/21/Multi-Process-Dispatch/ onCreate 方法中判断进程的名称,只有在符合要求的进程里,才执行初始化操作; 抽象出一个与 Application 生命周期同步的类,并根据不同的进程创建相应的 Application 实例。 2.通过 Binder 传递数据的限制 减少通过intent传递的数据,将非必须字段使用transient关键字修饰 将对象转化为JSON字符串,减少数据体积 3.后台启动 Activity 失效 场景:如果我们正在玩着游戏,此时手机后台可能有个下载某 App 的任务在执行。当 App 下载完之后突然弹出安装界面,中断了游戏界面的交互,这种情况会造成用户体验极差,而最终用户的吐槽对象都会转移到 Android 手机或者 Android 系统本身。 Android10(API29)开始,对后台进程启动Activity做了一定限制,目的就是尽可能的避免当前前台用户的交互被打断,保证当前屏幕上涨势的内容不受影响。 解决方法:

Android RecyclerView 局部刷新分析

╄→гoц情女王★ 提交于 2020-08-11 11:12:21
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { dispatchLayout(); mFirstLayoutComplete = true; } //2.mInPreLayout 设置为 true 后面有用 mState.mInPreLayout = mState.mRunPredictiveAnimations; //5.保存动画信息相关 mViewInfoStore.addToPreLayout(holder, animationInfo); //3.如果holder确定要更新,就把它添加到 oldChangeHolders 集合中 long key = getChangedHolderKey(holder); mViewInfoStore.addToOldChangeHolders(key, holder); @VisibleForTesting final LongSparseArray<RecyclerView.ViewHolder> mOldChangedHolders = new LongSparseArray<>(); public void onLayoutChildren(Recycler recycler, State state) { Log.e

RecycledView源码解析

≡放荡痞女 提交于 2020-08-07 04:31:56
RecyclerView LayoutManager Adapter,ViewHolder,ItemDecoration这些和RecycleView使用息息相关的类到底是什么关系 ItemDecoration这些和RecycleView使用息息相关的类到底是什么关系 onMeasure onLayout sMinWidthField = View.class.getDeclaredField("mMinWidth"); chooseSize setMeasuredDimension countOne ViewHolder Adapter,ViewHolder,ItemDecoration这些和RecycleView使用息息相关的类到底是什么关系 AdapterDataObserver { dispatchLayoutStep1 } dispatchLayoutStep2 getViewForPosition createViewHolder onLayout 1.RecyclerView是将绘制流程交给LayoutManager处理,如果没有设置不会测量子View。 2.绘制流程是区分正向绘制和倒置绘制。 3.绘制是先确定锚点,然后向上绘制,向下绘制,fill()至少会执行两次, 如果绘制完还有剩余空间,则会再执行一次fill()方法。 4

【Swift】获取UILabel中点击的某个功能标签文字并作出响应动作

柔情痞子 提交于 2020-07-26 21:37:54
  1、需求    首先、针对UILabel中显示的多个功能标签,作出颜色标记提示。   其次、对关键字作出点击响应动作。   如图所示:    解决:   1、使用正则匹配到关键字 public static var hashtag = DetectorType.custom( try ! NSRegularExpression(pattern: " #[\\u4e00-\\u9fa5a-zA-Z0-9]{1,} " , options: []))   扩展:获取字符串中满足正则表达式的字符串 func matches( for regex: String, in text: String) -> [String] { do { let regex = try NSRegularExpression(pattern: regex) let results = regex.matches( in : text, range: NSRange(text.startIndex..., in : text)) return results.map { String(text[Range($ 0 .range, in : text)! ]) } } catch let error { print( " invalid regex: \(error.localizedDescription)

【Swift】获取UILabel中点击的某个功能标签文字并作出响应动作

妖精的绣舞 提交于 2020-05-09 16:08:13
  1、需求    首先、针对UILabel中显示的多个功能标签,作出颜色标记提示。   其次、对关键字作出点击响应动作。   如图所示:    解决:   1、使用正则匹配到关键字 public static var hashtag = DetectorType.custom( try ! NSRegularExpression(pattern: " #[\\u4e00-\\u9fa5a-zA-Z0-9]{1,} " , options: []))   扩展:获取字符串中满足正则表达式的字符串 func matches( for regex: String, in text: String) -> [String] { do { let regex = try NSRegularExpression(pattern: regex) let results = regex.matches( in : text, range: NSRange(text.startIndex..., in : text)) return results.map { String(text[Range($ 0 .range, in : text)! ]) } } catch let error { print( " invalid regex: \(error.localizedDescription)

Android开发之漫漫长途 XV——RecyclerView

↘锁芯ラ 提交于 2020-04-27 18:13:18
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索》以及《深入理解Android 卷Ⅰ,Ⅱ,Ⅲ》中的相关知识,另外也借鉴了其他的优质博客,在此向各位大神表示感谢,膜拜!!! 前言 上文我们很详细的分析了ListView的使用、优化、及ListView的RecycleBin机制,读者如果对ListView不太清楚,那么请参看我的上篇博文。不过呢,Google Material Design提供的RecyclerView已经逐渐的取代ListView。RecyclerView提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。 如果说上面的理由只是大而空泛的话,那我们来看以下场景 你想控制数据的显示方式,列表显示、网格显示、瀑布流显示等等,之前你需要ListView,GridView和自定义View,而现在你可以通过RecyclerView的布局管理器LayoutManager控制 你想要控制Item间的间隔(可绘制),想自定义更多样式的分割线,之前你可以设置divider,那么现在你可以使用RecyclerView的ItemDecoration

Android RecyclerView与ListView比较

…衆ロ難τιáo~ 提交于 2020-04-27 18:13:01
RecyclerView 概述 RecyclerView 集成自 ViewGroup 。RecyclerView是Android-support-V7版本中新增的一个Widgets,官方对于它的介绍是:RecyclerView是ListView的升级版本,更加先进和灵活。 Android L 之后,Google 提供了RecyclerView视图化控件,5.0之前如果想要使用的话,可以添加V7包以向下兼容,提供更全面的API和更灵活的布局管理。 RecyclerView 做了什么 类似ListView; 类似GridView; 横向ListView; 横向GridView; 瀑布流式布局 RecyclerView 组成 RecyclerView.LayoutManager RecyclerView.Recyler RecyclerView.Adapter RecyclerView.ViewHolder RecyclerView.ItemDecoration RecyclerView.ItemAnimator 机制:layoutmanager 从Recycle 中获取已经绑定数据的 Item 显示,并将不再需要的Item 丢给Recycler 回收;Adapter 负责生成新Item 并将其绑定好数据,供Recyle获取;Recycler 就是子 Item 的一个缓存池。