
ListView和Recyclerview
Luckie stone
Android应用开发。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RecyclerView嵌套
方向不同的内层RecyclerView只会加载显示的item。方向相同的内层RecyclerView会加载所有的item。原创 2023-05-23 10:08:48 · 213 阅读 · 0 评论 -
你可能不知道的Support:0步自动定向刷新:SortedList
由于IM会话列表是从数据库里读的,他还告诉我会有数据集重复的现象,且会话列表肯定是按时间排序的,所以这对我们的数据组织提出了两点要求:有序、去重。我的想法是:* 采用DiffUtil自动计算新老数据集差异,然后自动完成定向刷新。* 至于数据集的去重和有序,我打算用TreeSet去帮助我们做。利用Set本身元素不重复的特性,加之Tree的有序性,来解决数据组织的两个需求。可是leader不知道从哪搜出来一个SortedList,告诉我这是Android SDK提供的。也可以完成排序and去重。转载 2020-06-20 13:12:36 · 257 阅读 · 0 评论 -
RecyclerView的好伴侣:详解DiffUtil
一 概述DiffUtil是support-v7:24.2.0中的新工具类,它用来比较两个数据集,寻找出旧数据集-》新数据集的最小变化量。说到数据集,相信大家知道它是和谁相关的了,就是我的最爱,RecyclerView。就我使用的这几天来看,它最大的用处就是在RecyclerView刷新时,不再无脑mAdapter.notifyDataSetChanged()。以前无脑mAdapter.notifyDataSetChanged()有两个缺点:不会触发RecyclerView的动画(删除、新增、位移转载 2020-06-20 13:00:47 · 807 阅读 · 0 评论 -
RecyclerView notifyDataSetChanged 导致图片闪烁的原因
目前,在项目中一些主要页面(如图1 首页,采用ViewPager+TabLayout ,已实现数据懒加载)都会缓存第一页数据(网络)存DB,下次进来时会先请求DB数据,然后再请求网络数据,这样用户体验比较好。之前我们主要页面都是使用RadioPullToRefreshListView(封装的PullToRefreshListView,后面简称ListView)方式实现(刷新方式使用的是notifyDataSetChanged),这样不管DB中的数据和网路请求数据是否一样,都会刷新两次,体验上没...转载 2020-06-20 12:45:39 · 4965 阅读 · 1 评论 -
RecyclerView性能优化及高级使用
1、RecyclerView缓存1.1 RecyclerView主要有三级缓存:(1)Attached scrap & Changed scrapArrayList<ViewHolder> mAttachedScrap 主要用在插入或是删除itemView时,先把屏幕内的ViewHolder保存至AttachedScrap中,作用在LayoutManager中,它仅仅把需要从ViewGroup中移除的子view设置它的父view为null,从而实现了从Recycler转载 2020-06-20 12:27:08 · 2976 阅读 · 0 评论 -
基于滑动场景解析RecyclerView的回收复用机制原理
最近在研究 RecyclerView 的回收复用机制,顺便记录一下。我们知道,RecyclerView 在 layout 子 View 时,都通过回收复用机制来管理。网上关于回收复用机制的分析讲解的文章也有一大堆了,分析得也都很详细,什么四级缓存啊,先去 mChangedScrap 取再去哪里取啊之类的;但其实,我想说的是,RecyclerView 的回收复用机制确实很完善,覆盖到各种场景中,但并不是每种场景的回收复用时都会将机制的所有流程走一遍的。举个例子说,在 setLayoutManager、setA转载 2020-06-20 11:53:30 · 459 阅读 · 0 评论 -
可水平滚动RecyclerView,自定义滚动条滚动距离
前几天,产品出了个原型图,直接截图拼多多,可滑动宫格,实现随意水平滑动。于是研究下拼多多的样式,感觉是一个水平滑动的RecyclerView,但是底部的滚动条,瞬间挠头了~~~于是乎研究滚动条,尝试修改RecyclerView自带的滚动条,可把自己折腾坏了,游标的滑动时可以自定义了,但是底部scrollbarTrackHorizontal 的长短修改不了。另寻他法。。。研究了下源码,有这几个方法可以使用。。。//当前RcyclerView显示区域的高度。水平列表屏幕从左侧到右侧显示范围i...转载 2020-06-20 10:38:46 · 2410 阅读 · 0 评论 -
RecyclerView——SnapHelper详解
简介RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类,用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。特别是列表横向滑动时,很多时候不会让列表滑到任意位置,而是会有一定的规则限制,这时候就可以通过SnapHelper来定义对齐规则了。SnapHelper是一个抽象类,官方提供了一个LinearSnapHelper的子类,可以让RecyclerView滚动停止时相应的Item停留中间位置。25.1.0版本中官方又提供了一个PagerSnapHelp原创 2020-06-20 10:32:44 · 1866 阅读 · 0 评论 -
RecyclerView系列之二自定义LayoutManager
在这节中,我们先自己制作一个LinearLayoutManager,来看下如何自定义LayoutManager,下节中,我们会通过自定义LayoutManager来制作第一个滚轮翻页的效果。一、初始化展示界面1.1 自定义CustomLayoutManager先生成一个类CustomLayoutManager,派生自LayoutManager:public class CustomL...转载 2018-12-22 13:21:42 · 2162 阅读 · 0 评论 -
RecyclerView系列之三实现回收复用
一、View的回收与复用1.1 RecyclerView是否会自动回收复用想必大家都听说RecyclerView是可以回收复用的,但它会自动复用吗?我们上面写的CustomLayoutManager会不会复用呢?1.1.1 如何判断是否复用首先,我们需要知道怎么判断RecyclerView是不是复用了View。我们知道在Adapter中有两个函数:@Overridepublic ...转载 2018-12-22 14:19:26 · 4916 阅读 · 0 评论 -
RecyclerView系列之四回收复用实现方式二
在上篇中,我们先将摆好所有要显示的新增item以后,再使用offsetChildrenVertical(-travel)函数来移动屏幕中所有item。很明显,这种方法仅适用于每个item,在移动时,没有特殊效果的情况,当我们在移动item时,同时需要改变item的角度、透明度等情况时,单纯使用offsetChildrenVertical(-travel)来移是不行的。针对这种情况,我们就只有使用第...转载 2018-12-22 15:10:29 · 977 阅读 · 0 评论 -
关于ListView、RecyclerVew中嵌套EditText,焦点及其他点击问题
public class EditHodler extends RecyclerView.ViewHolder { private EditText et; public EditHodler(View itemView) { super(itemView); et = (EditText) ite...转载 2018-12-30 11:30:21 · 421 阅读 · 0 评论 -
RecyclerView复用EditText后长按不可选中
要想找到问题的原因就得debug,入口呢?就是上篇文章提到的selectCurrentWordAndStartDrag()这个方法private boolean selectCurrentWordAndStartDrag() { if (mInsertionActionModeRunnable != null) { mTextView.removeCa...转载 2019-01-01 08:41:25 · 666 阅读 · 0 评论 -
RecyclerView系列之一ItemDecoration
一、添加分割线1.1 引入ItemDecoration在上一篇中,我们讲解了RecyclerView的基本使用方法,但有个问题:为什么Item之间没有分割线呢?其实,给RecyclerView添加分割线也非常简单,只需要添加上一句话:DividerItemDecoration mDivider = new DividerItemDecoration(this,DividerItemDec...转载 2019-01-19 11:53:42 · 609 阅读 · 0 评论 -
自定义控件三部曲视图篇(九)——RecycerView系列之六实现滚动画廊控件
在上一章中,我们讲了RecyclerView的各种基础知识,在这章中,我们将通过非常炫酷的特效来实际学习下RecyclerView。可以看到,通过这些看似平淡的功能,能做出非常漂亮的控件,现在我们就开始吧。5.1 滚动画廊控件本节将实现在上一章中提到过的画廊效果,但为了减轻难度,就不再制作3D画廊,而是制作出2D的,不过最后将在2D的基础上,讲解3D画廊的实现原理,本节实现的效果如下图所示:...转载 2019-02-17 12:10:53 · 995 阅读 · 1 评论 -
获取RecyclerView当前屏幕显示的第一个条目的position位置
一、关于LinearLayoutManager或GridLayoutManager获取当前屏幕第一个条目的位置或最后一个位置的方法;findFirstCompletelyVisibleItemPosition(),findFirstVisibleItemPosition() : 可以获取屏幕中展示第一个item的position值findLastCompletelyVisibleItem...转载 2019-03-12 07:15:17 · 14140 阅读 · 4 评论 -
解决RecyclerView.getChildAt(Position)崩溃
问题:程序中,屏幕可以获取到6个子view.当getChildAt() ,position为6或者为7的时候,程序崩溃,报空指针的异常.实际上:getChildAt()这个方法,只能get到屏幕显示的部分.解决办法:View childView = recyclerView.getLayoutManager().findViewByPosition(position);...转载 2019-03-13 07:10:29 · 846 阅读 · 0 评论 -
Android RecyclerView + Paging Library 添加头部刷新会自动滚动的问题分析及解决
一、前言最近在做一款应用,因为 api 涉及到分页的,所以选择用 RecyclerView + Paging 去做,能省去向下滚动时去处理加载下一页的数据的逻辑,Paging 会自动去加载下一页的内容,首页要做个 Banner, 所以把 Banner 作为 RecyclerView 的 头添加进去,可是添加后下面的数据加载完就会自动滚到下面去,如下图,一下拉刷新,加载完数据后就滚到下面去了二...转载 2019-04-23 06:12:49 · 659 阅读 · 1 评论 -
Android实现RecyclerView侧滑删除和长按拖拽-ItemTouchHelper
RecyclerView这个被誉为ListView和GirdView的替代品,它的用法在之前的一篇博文中就已经讲过了,今天我们就来实现RecyclerView的侧滑删除和长按拖拽功能,实现这两个功能我们只需要一个类——ItemTouchHelperItemTouchHelperGoogle官方文档上是这么介绍的:This is a utility class to add swipe t...转载 2019-05-11 16:32:27 · 484 阅读 · 0 评论 -
RecyclerView拖动滑动之ItemTouchHelper
ItemTouchHelperItemTouchHelper是一个强大的工具,它处理好了关于在RecyclerView上添加拖动排序与滑动删除的所有事情。它是RecyclerView.ItemDecoration的子类,也就是说它可以轻易的添加到几乎所有的LayoutManager和Adapter中。它还可以和现有的item动画一起工作,提供受类型限制的拖放动画等等,类介绍主要...转载 2019-05-11 17:53:30 · 1119 阅读 · 0 评论 -
RecyclerView自动滚动
smoothScrollToPosition()在使用RecyclerView的时候,有一些场景需要RecyclerView能自动滑动到指定的item,这种情况可以调用RecyclerView的以下方法来实现:scrollToPosition(int position)smoothScrollToPosition(int position)这两个方法传入需要滑动到的item的posit...转载 2019-05-11 17:57:08 · 1212 阅读 · 0 评论 -
TextView 在 RecyclerView 中被复用之后,文字不可选中?
TextView does not support text selection. Action mode cancelled.这貌似是一个 Android platform 的已知bug,解决起来也很简单。1. 在adapter中重写onViewAttachedToWindow方法@Overrideprotected void onViewAttachedToWindow(Rec...转载 2019-01-06 10:34:13 · 1113 阅读 · 0 评论 -
adapter.notifyDataSetChanged没有反应,触摸滑动屏幕才刷新
今天做项目遇到个比较头疼的问题,adapter.notifyDataSetChanged没有反应,要触摸屏幕才可以改变数据,上网查资料有人说是给list集合赋值的时候地址改变了(要用list.addAll()),可是我并没有改变地址 ,只是手动改了一个item的数据而已,后来发现只要延迟刷新就可以了handler.postDelayed(new Runnable() { ...转载 2018-11-17 18:26:09 · 1728 阅读 · 1 评论 -
Android使用tools:listitem属性使xml布局预览时可以显示istView和RecyclerView的item布局
一、问题描述最近在Check团队成员代码的时候,发现大部分团队使用RecyclerView和ListView的布局文件,都没有很友好的展示出这个布局对应的item布局,如下所示:<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android=...转载 2019-07-04 06:40:48 · 5423 阅读 · 2 评论 -
ListView复用和优化详解
前言我们每一个Android开发人员对ListView的使用肯定是很熟悉的,然而多少人能真正的懂ListView的缓存机制呢,说白了就是ListView为了提高效率,而内部实现的一种优化,牺牲一点内存。而这种优化就需要复用ItemView(也就是item对应的View).那么下面楼主来对ListView和RecyclerView的item复用问题做一个深入的讲解先来一张大家学习的时候都遇到...转载 2018-03-05 08:17:27 · 271 阅读 · 0 评论 -
RecyclerView中获取Item位置的两种方法
RecyclereView中有两种方法获取当前Item位置信息的时候,有两种方法,分别是getAdapterPosition()方法和getLayoutPosition()方法,二者对应的源码分别如下:public final int getAdapterPosition() { if (mOwnerRecyclerView == null) { return NO_...转载 2018-11-26 07:21:57 · 14836 阅读 · 0 评论 -
关于在外部拿到RecyclerView的viewholder的几种方式
在实际开发中,我们常常碰到这样的需求,需要在外部拿到RecyclerView 中的viewHoler,从而动态的修改UI,在RecyclerView中,我们需要自己封装点击事件,一般的做法是在recyclerview每一次bind的时候我们给viewholder的itemview注册监听事件,典型写法如下:@Overridepublic void onBindViewHolde...转载 2018-11-25 19:39:27 · 13649 阅读 · 0 评论 -
android RecyclerView获得单个Item的ViewHolder
我们在使用RecyclerView时,有时候还需要获取某个Item的viewHolder,具体如下:int firstItemPosition = layoutManager.findFirstVisibleItemPosition();if (position - firstItemPosition >= 0) { //得到要更新的item的view View vi...转载 2018-11-25 19:23:23 · 7347 阅读 · 0 评论 -
Android ListView异步加载图片乱序问题,原因分析及解决方案
在Android所有系统自带的控件当中,ListView这个控件算是用法比较复杂的了,关键是用法复杂也就算了,它还经常会出现一些稀奇古怪的问题,让人非常头疼。比如说在ListView中加载图片,如果是同步加载图片倒还好,但是一旦使用异步加载图片那么问题就来了,这个问题我相信很多Android开发者都曾经遇到过,就是异步加载图片会出现错位乱序的情况。遇到这个问题时,不少人在网上搜索找到了相应的解决方...转载 2018-07-19 06:56:19 · 185 阅读 · 0 评论 -
Android ListView工作原理完全解析,带你从源码的角度彻底理解
在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况。ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了。 另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到成百上千条甚至更多...转载 2018-07-19 06:56:07 · 185 阅读 · 0 评论 -
RecyclerView 嵌套,里层 RecyclerView 自适应高度的正确做法
1、配置版本:compile 'com.android.support:recyclerview-v7:23.2.1'或以后的版本。2、设置LayoutManager.setAutoMeasureEnabled(true);原创 2018-04-26 18:02:15 · 5980 阅读 · 1 评论 -
阿里开源库vLayout的使用
vlayout是阿里开源的一个用来辅助RecyclerView的LayoutManager扩展库,通过使用里面的LayoutHelper,我们可以轻松的使用一些比较复杂的布局,如:线性布局、Grid布局、固定布局、浮动布局、栏格布局、通栏布局、一拖N布局、一拖N布局、瀑布流布局。还可以组合使用这些布局。Demo地址使用步骤 本笔记是基于vLayout的1.2.10版本写的...原创 2018-02-09 09:11:15 · 1363 阅读 · 0 评论 -
给RecyclerView最纯粹的下拉刷新和上拉加载更多
RecyclerView 出现以后,Android 里的下拉刷新和加载更多实现起来就非常容易了。当然,现成的库也有很多,只是总会有不一样的需求,而且我们往往只需要最基本的下拉刷新和加载更多功能,而不需要其他多余的功能。我只需要一个最纯粹的下拉刷新和加载更多。所以,自己动手显然是最好的结果了,也算是个小练习。总结起来,无非两点,一是用SwipeRefreshLayout包裹RecyclerVi...转载 2018-02-26 11:26:47 · 381 阅读 · 0 评论 -
ListView复用和优化之多布局详解
前言在上一篇文章中,我已经非常详细的阐述了ListView的复用原理和几个大家不太明白的地方.也同时重现了复用的问题并告诉大家如何去解决.如果你没有看上一篇,请先移步,这篇基于上一篇的知识继续讲解ListView中多布局是个什么原理。实现联系人列表的展现形式先随便放一个联系人列表的效果图,博主随便找了一张图给大家看看效果先我们可以看到,这里肯定是一个列表来实现的,如...转载 2018-03-05 08:38:22 · 230 阅读 · 0 评论 -
ListView嵌套GridView时遇到的一些坑
需求是用ListView来嵌套GridView来显示数据,GridView是用来显示图片的。照着常规方法将GridView作为ListView中Item布局的一部分来显示,给GridView设置numColumns=3,这里设置了九张图片,按道理分3行显示,但是运行程序后只显示了一行数据,也就是3行图片。试着改了改GridView的高度,木有任何作用。why?由于ListView和GridVi...转载 2018-03-08 08:26:38 · 1386 阅读 · 0 评论 -
ScrollView和ListView嵌套问题。
private void setListViewHeightBasedOnChildren(ListView listView) { if (listView == null) { return; } ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) ...原创 2018-03-13 16:17:46 · 206 阅读 · 0 评论 -
RecyclerView使用详解(三)
在上一篇(RecyclerView使用详解(二))文章中介绍了RecyclerView的多Item布局实现,接下来要来讲讲RecyclerView的Cursor实现,相较于之前的实现,Cursor有更多的使用场景,也更加的常用,特别是配合LoaderManager和CursorLoader进行数据的缓存及加载显示,基于此我们来重点看看RecyclerView的CursorAdapter具体要怎么实...转载 2018-02-09 08:51:45 · 319 阅读 · 0 评论 -
RecyclerView使用详解(二)
在上一篇(RecyclerView使用详解(一))文章中简单的介绍了RecyclerView的基本用法,接下来要来讲讲RecyclerView的更多用法,要实现不同的功能效果,大部分都还是在于RecyclerView的Adapter写法,所以我们着重来看看几种不同功能的Adapter写法。一、多Item布局实现(MultipleItem)如果之前你用过ListView实现过此功能,那么你一...转载 2018-02-09 08:51:01 · 295 阅读 · 0 评论 -
Android ListView功能扩展,实现高性能的瀑布流布局
ListView的工作原理就非常巧妙,它使用RecycleBin实现了非常出色的生产者和消费者的机制,移出屏幕的子View将会被回收,并进入到RecycleBin中进行缓存,而新进入屏幕的子View则会优先从RecycleBin当中获取缓存,这样的话不管我们有多少条数据需要显示,实际上屏幕上的子View其实也就来来回回那么几个。 那么,如果我们使用ListView工作原理来实现瀑布流布局,...转载 2018-07-19 06:56:35 · 963 阅读 · 0 评论 -
完全自定义RecyclerView下拉刷新上拉加载
自从谷歌推出SwipeRefreshLayout之后越来越多的博客都是使用SwipeRefreshLayout来完成下拉刷新,但是往往产品经理根本不会使用谷歌的样式.每个公司都有一套自己的下拉样式这个时候就需要我们完全自定义RecyclerView的下拉刷新,基本查阅了网上所有的下拉刷新,但是效果都不怎么样.个人感觉我写的这个下拉刷新效果方面绝对的66666,欢迎可以提出一些改进意见: ...转载 2018-08-10 06:56:55 · 591 阅读 · 1 评论