Android RecyclerView的notify方法和动画的刷新详解(二)

简介: Android RecyclerView的notify方法和动画的刷新详解

下面是调用不同的notify方法适配器执行的方法顺序如下:

对应上文

1、执行notifyAllData(),实际调用的是 notifyDataSetChanged 刷新全部,适配器执行方法如下

getItemCount: 6
getItemCount: 6
getItemCount: 6
getItemViewType: 0
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemViewType: 1
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemViewType: 2
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemViewType: 3
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemViewType: 4
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemViewType: 5
onCreateViewHolder: 
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
getItemCount: 6
getItemViewType: 2
getItemCount: 6
getItemViewType: 3
getItemCount: 6
getItemViewType: 4
getItemCount: 6
getItemViewType: 5

2、执行notify_2(),实际调用的是 notifyItemChanged(2),适配器执行方法如下

getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
getItemCount: 6
getItemViewType: 2
onCreateViewHolder: 
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemViewType: 3
getItemCount: 6
getItemViewType: 4
getItemCount: 6
getItemViewType: 5
onCreateViewHolder: 
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
getItemCount: 6
getItemViewType: 2
getItemCount: 6
getItemViewType: 3
getItemCount: 6
getItemViewType: 4
getItemCount: 6
getItemViewType: 5

3、执行notify_234(),实际调用的是 notifyItemRangeChanged(2, 3);,适配器执行方法如下

getItemCount: 6
 getItemCount: 6
 getItemViewType: 0
 getItemCount: 6
 getItemViewType: 1
 getItemCount: 6
 getItemViewType: 2
 onCreateViewHolder: 
 onBindViewHolder:三个参数
 onBindViewHolder:两个参数
 getItemCount: 6
 getItemViewType: 3
 onCreateViewHolder: 
 onBindViewHolder:三个参数
 onBindViewHolder:两个参数
 getItemCount: 6
 getItemViewType: 4
 onCreateViewHolder: 
 onBindViewHolder:三个参数
 onBindViewHolder:两个参数
 getItemCount: 6
 getItemViewType: 5
 onCreateViewHolder: 
 onBindViewHolder:三个参数
 onBindViewHolder:两个参数
 getItemCount: 6
 getItemCount: 6
 getItemViewType: 0
 getItemCount: 6
 getItemViewType: 1
 getItemCount: 6
 getItemViewType: 2
 getItemCount: 6
 getItemViewType: 3
 getItemCount: 6
 getItemViewType: 4
 getItemCount: 6
 getItemViewType: 5

4、执行notifyPart_2(),实际调用的是 notifyItemChanged(2, “title”);,适配器执行方法如下

getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
getItemCount: 6
getItemViewType: 2
onBindViewHolder:三个参数
getItemCount: 6
getItemViewType: 3
getItemCount: 6
getItemViewType: 4
getItemCount: 6
getItemViewType: 5
onCreateViewHolder: 
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
getItemCount: 6
getItemViewType: 2
getItemCount: 6
getItemViewType: 3
getItemCount: 6
getItemViewType: 4
getItemCount: 6
getItemViewType: 5

5、执行notifyPart_234(),实际调用的是notifyItemRangeChanged(2, 3, “content”);,适配器执行方法如下

getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
getItemCount: 6
getItemViewType: 2
onBindViewHolder:三个参数
getItemCount: 6
getItemViewType: 3
onBindViewHolder:三个参数
getItemCount: 6
getItemViewType: 4
onBindViewHolder:三个参数
getItemCount: 6
getItemViewType: 5
onCreateViewHolder: 
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
getItemCount: 6
getItemViewType: 2
getItemCount: 6
getItemViewType: 3
getItemCount: 6
getItemViewType: 4
getItemCount: 6
getItemViewType: 5

6、执行insert_1_1(),实际调用的是notifyItemInserted(1);,适配器执行方法如下

getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
onCreateViewHolder: 
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 6
getItemViewType: 2
getItemCount: 6
getItemViewType: 3
getItemCount: 6
getItemViewType: 4
getItemCount: 6
getItemViewType: 5
getItemCount: 6
getItemCount: 6
getItemViewType: 0
getItemCount: 6
getItemViewType: 1
getItemCount: 6
getItemViewType: 2
getItemCount: 6
getItemViewType: 3
getItemCount: 6
getItemViewType: 4
getItemCount: 6
getItemViewType: 5

7、执行insert_3_2(),实际调用的是notifyItemRangeInserted(3, 2);,适配器执行方法如下

getItemCount: 7
getItemCount: 7
getItemViewType: 0
getItemCount: 7
getItemViewType: 1
getItemCount: 7
getItemViewType: 2
getItemCount: 7
getItemViewType: 3
onCreateViewHolder: 
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 7
getItemViewType: 4
onCreateViewHolder: 
onBindViewHolder:三个参数
onBindViewHolder:两个参数
getItemCount: 7
getItemViewType: 5
getItemCount: 7
getItemViewType: 6
getItemCount: 7
getItemCount: 7
getItemViewType: 0
getItemCount: 7
getItemViewType: 1
getItemCount: 7
getItemViewType: 2
getItemCount: 7
getItemViewType: 3
getItemCount: 7
getItemViewType: 4
getItemCount: 7
getItemViewType: 5
getItemCount: 7
getItemViewType: 6

7、执行move_2_4(),实际调用的是notifyItemMoved(2, 4);,适配器执行方法如下

getItemCount: 5
getItemCount: 5
getItemViewType: 0
getItemCount: 5
getItemViewType: 1
getItemCount: 5
getItemViewType: 2
getItemCount: 5
getItemViewType: 3
getItemCount: 5
getItemViewType: 4
getItemCount: 5
getItemCount: 5
getItemViewType: 0
getItemCount: 5
getItemViewType: 1
getItemCount: 5
getItemViewType: 2
getItemCount: 5
getItemViewType: 3
getItemCount: 5
getItemViewType: 4

8、执行remove2(),实际调用的是notifyItemRemoved(2);,适配器执行方法如下

getItemCount: 4
getItemCount: 4
getItemViewType: 0
getItemCount: 4
getItemViewType: 1
getItemCount: 4
getItemViewType: 2
getItemCount: 4
getItemViewType: 3
getItemCount: 4
getItemCount: 4
getItemViewType: 0
getItemCount: 4
getItemViewType: 1
getItemCount: 4
getItemViewType: 2
getItemCount: 4
getItemViewType: 3

9、执行remove234(),实际调用的是notifyItemRangeRemoved(2, 3);,适配器执行方法如下

getItemCount: 2
getItemCount: 2
getItemViewType: 0
getItemCount: 2
getItemViewType: 1
getItemCount: 2
getItemCount: 2
getItemViewType: 0
getItemCount: 2
getItemViewType: 1

RecyclerView的动画ItemAnimator:

ItemAnimator主要用于ReyclerView的item添加,移除,更新时的动画,ItemAnimator的直接子类是SimpleItemAnimator.

DefaultItemAnimator继承的是抽象类SimpleItemAnimator,SimpleItemAnimator主要对动画内部实现进行封装,通过抽象让我们只关注于更具体的操作。所以我们如果想实现一个自己的动画,那么我们就需要定义一个类,并且继承SimpleItemAnimator,然后去实现对应的抽象方法

RecyclerView动画可以选择使用三方库

Github地址

https://github.com/wasabeef/recyclerview-animators
目录
相关文章
|
14天前
|
Android开发 UED
Android Item平移动画
【6月更文挑战第18天】
|
11天前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
21 2
|
20天前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
21天前
|
Android开发 Kotlin
Android面试题 之 Kotlin DataBinding 图片加载和绑定RecyclerView
本文介绍了如何在Android中使用DataBinding和BindingAdapter。示例展示了如何创建`MyBindingAdapter`,包含一个`setImage`方法来设置ImageView的图片。布局文件使用`<data>`标签定义变量,并通过`app:image`调用BindingAdapter。在Activity中设置变量值传递给Adapter处理。此外,还展示了如何在RecyclerView的Adapter中使用DataBinding,如`MyAdapter`,在子布局`item.xml`中绑定User对象到视图。关注公众号AntDream阅读更多内容。
21 1
|
4天前
|
Android开发
android 动画 插值器和估值器
android 动画 插值器和估值器
|
9天前
|
XML Android开发 数据格式
Android AppCompatActivity 方法详解
Android AppCompatActivity 方法详解
8 0
|
16天前
|
缓存 大数据 Android开发
Android 巧用putBinder方法传递大文件
Android 巧用putBinder方法传递大文件
23 0
|
16天前
|
XML Java Android开发
Android RecyclerView用代码动态设置item的selector
Android RecyclerView用代码动态设置item的selector
17 0
|
19天前
|
XML Android开发 UED
|
2月前
|
Android开发
【通讯录教程】苹果安卓鸿蒙系统通用,如何大批量导入手机号码到手机的通讯录,下面教你方法,只需1分钟搞定几万个号码的导入手机电话本
该文介绍了一种快速批量导入手机通讯录的方法,适用于处理大量手机号的需求,如微商管理、客户资料整理等。在QQ同步助手开始收费后,提供了免费的替代方案。步骤包括:下载批量导入软件(链接提供腾讯云盘和百度网盘地址),清空通讯录(非必需),制作符合格式的通讯录文件,并按操作系统(苹果、安卓或鸿蒙)进行导入。整个过程只需1分钟,简便快捷。