文章目录

  • 一、增加单条数据
  • 二、增加多条数据
  • 三、完整代码示例
  • 四、RecyclerView 相关资料

一、增加单条数据


增加单条数据 : 调用 RecyclerView.Adapter 的 void notifyItemInserted(int position) 方法 , 传入的参数是被插入的元素的当前索引 ;

该方法的作用是通知任何被注册的观察者 , 该 item 元素的 position 位置是被新插入的 ;

该位置之前的元素目前在 position + 1 位置 ;

int position 参数 : 最新插入的元素在数据集中的位置 ;

注意 : 调用该方法后 , 只会刷新与该位置相关的 item 元素 , 不会刷新其它元素 , 即使数据改变了 , 也不会刷新 ;

代码示例 : 在集合的开始位置插入一个元素 ;

                // 在集合开始添加一个元素names.add(0, "戴宗");// 通知适配器新元素添加adapter.notifyItemInserted(0);

RecyclerView.Adapter.notifyItemInserted(int position) 函数原型 : 该函数定义在 RecyclerView 的内部类 Adapter 中 ;

public class RecyclerView extends ViewGroup implements ScrollingView,NestedScrollingChild2, NestedScrollingChild3 {public abstract static class Adapter<VH extends ViewHolder> {/*** 通知任何被注册的观察者 , 该 item 元素的 position 位置是被新插入的 ; * 该位置之前的元素目前在 position + 1 位置 ; ** 这是一个结构性的变化事件 ; * 表示在数据集中的其它元素仍然被认为是最新的数据 , 这些数据不会被重新绑定 , * 尽管它们的位置已经发生了变化 ;** @param position 最新插入的元素在新的数据集中的位置 ;** @see #notifyItemRangeInserted(int, int)*/public final void notifyItemInserted(int position) {mObservable.notifyItemRangeInserted(position, 1);}}
}

运行效果 : 动画效果是系统自带的 , 可以自己实现 ;

二、增加多条数据


增加单条数据 : 调用 RecyclerView.Adapter 的 void notifyItemRangeInserted(int positionStart, int itemCount) 方法 , 传入的参数是被插入的元素的首个索引 , 以及插入元素的个数 ;

通知任何被注册的观察者 , 从 positionStart 位置开始的 itemCount 个 item 元素是被新插入的 ;

被插入数据之前 positionStart 位置的元素目前在 positionStart + itemCount 位置 ;

参数说明 :

int positionStart 参数 : 新插入的首个元素位置 ;

int itemCount 参数 : 新插入元素的个数 ;

代码示例 : 在集合的开始位置插入三个元素 ;

                // 在集合开始添加多个元素names.add(0, "戴宗");names.add(0, "刘唐");names.add(0, "李逵");// 通知适配器多个新元素添加adapter.notifyItemRangeInserted(0, 3);

RecyclerView.Adapter.notifyItemInserted(int position) 函数原型 : 该函数定义在 RecyclerView 的内部类 Adapter 中 ;

public class RecyclerView extends ViewGroup implements ScrollingView,NestedScrollingChild2, NestedScrollingChild3 {public abstract static class Adapter<VH extends ViewHolder> {/*** 通知任何被注册的观察者 , 从 positionStart 位置开始的 itemCount 个 item 元素是被新插入的 ; * 被插入数据之前 positionStart 位置的元素目前在 positionStart + itemCount 位置 ;** 这是一个结构性的变化事件 ; * 表示在数据集中的其它元素仍然被认为是最新的数据 , 这些数据不会被重新绑定 , * 尽管它们的位置已经发生了变化 ;** @param positionStart 被插入的首个元素位置 ;* @param itemCount 被插入元素个数 ;** @see #notifyItemInserted(int)*/public final void notifyItemRangeInserted(int positionStart, int itemCount) {mObservable.notifyItemRangeInserted(positionStart, itemCount);}}
}

运行效果 : 动画效果是系统自带的 , 可以自己实现 ;

三、完整代码示例


完整代码示例 仅做参考 :

package kim.hsl.recyclerview;import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {/*** 数据源*/private ArrayList<String> names = new ArrayList<String>();/*** 适配器*/private Adapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化数据initData();//1 . 从布局中获取 RecyclerViewRecyclerView recycler_view = findViewById(R.id.recycler_view);//2 . 创建并设置布局管理器//创建布局管理器StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(4,RecyclerView.VERTICAL);//设置布局管理器recycler_view.setLayoutManager(layoutManager);// 设置边距recycler_view.addItemDecoration(new ItemDecoration());//3 . 创建并设置列表适配器adapter = new Adapter();recycler_view.setAdapter(adapter);// 初始化点击事件initClick();}/*** 初始化数据*/private void initData(){names.add("宋江");names.add("卢俊义");names.add("吴用");names.add("公孙胜");names.add("关胜");names.add("林冲");names.add("秦明");names.add("呼延灼");names.add("花荣");names.add("柴进");names.add("李应");names.add("朱仝");names.add("鲁智深");names.add("武松");names.add("董平");names.add("张清");names.add("杨志");names.add("徐宁");names.add("索超");}void initClick(){// 增加单个数据findViewById(R.id.insert_single).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在集合开始添加一个元素names.add(0, "戴宗");// 通知适配器新元素添加adapter.notifyItemInserted(0);}});// 增加多个数据findViewById(R.id.insert_multi).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 在集合开始添加多个元素names.add(0, "戴宗");names.add(0, "刘唐");names.add(0, "李逵");// 通知适配器多个新元素添加adapter.notifyItemRangeInserted(0, 3);}});// 删除单个数据findViewById(R.id.delete_single).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 删除第 0 个元素names.remove(0);// 通知适配器adapter.notifyItemRemoved(0);}});// 删除多个数据findViewById(R.id.delete_multi).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 删除第 0 ~ 2 个元素names.remove(0);names.remove(0);names.remove(0);// 通知适配器adapter.notifyItemRangeRemoved(0, 3);}});// 修改单个数据findViewById(R.id.modify_single).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 替换第 0 个元素names.set(0, "宋江江");// 通知适配器adapter.notifyItemChanged(0);}});// 修改多个数据findViewById(R.id.modify_multi).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 替换第 0, 1, 2 个元素names.set(0, "宋江江");names.set(1, "卢俊俊");names.set(2, "吴用用");// 通知适配器adapter.notifyItemRangeChanged(0, 3);}});// 移动数据findViewById(R.id.move_single).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 先移除第 0 个names.remove(0);// 然后在第 7 个位置插入, 此时变为第 7 个元素names.add(7, "宋江");// 通知适配器adapter.notifyItemMoved(0, 7);}});}/*** RecyclerView 适配器*/public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View root_view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recyclerview, parent, false);return new ViewHolder(root_view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {holder.text.setText("" + names.get(position));}@Overridepublic int getItemCount() {return names.size();}public class ViewHolder extends RecyclerView.ViewHolder {TextView text;public ViewHolder(@NonNull View itemView) {super(itemView);text = itemView.findViewById(R.id.text);}}}}

四、RecyclerView 相关资料


官方文档 :

使用 RecyclerView 创建动态列表 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview

高级 RecyclerView 自定义 : https://developer.android.google.cn/guide/topics/ui/layout/recyclerview-custom

RecyclerView 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView

RecyclerView.Adapter 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.Adapter

RecyclerView.ViewHolder 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.ViewHolder

RecyclerView.ItemDecoration 官方文档 : https://developer.android.google.cn/reference/androidx/recyclerview/widget/RecyclerView.ItemDecoration

代码示例 :

GitHub 源码地址 : https://github.com/han1202012/001_RecyclerView

博客源码快照 : https://download.csdn.net/download/han1202012/14984775

( 使用 Android Studio 打开 )

【RecyclerView】 十、RecyclerView 数据更新 ( 增加单条数据 | 批量增加数据 )相关推荐

  1. 【RecyclerView】 十二、RecyclerView 数据更新 ( 修改单条数据 | 批量修改数据 )

    文章目录 一.修改单条数据 二.批量修改数据 三.完整代码示例 四.RecyclerView 相关资料 一.修改单条数据 修改单条数据 : 调用 RecyclerView.Adapter 的 void ...

  2. 【RecyclerView】 十一、RecyclerView 数据更新 ( 删除单条数据 | 批量删除数据 )

    文章目录 一.删除单条数据 二.批量删除数据 三.完整代码示例 四.RecyclerView 相关资料 一.删除单条数据 删除单条数据 : 调用 RecyclerView.Adapter 的 void ...

  3. ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

    在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新, 在刚碰到的时候,第一反应是将其实现分为两块,分别是判断增加,判断更新,后来发现在mysql中有 ON DUP ...

  4. ubuntu导入python的包_在ubuntu环境下怎么利用python将数据批量导入数据hbase

    斯蒂芬大帝 能够单条导入就能够批量导入配置 thriftpython使用的包 thrift个人使用的python 编译器是pycharm community edition. 在工程中设置中,找到pr ...

  5. php 循环从数据库分页取数据批量修改数据

    1 //批量修改email重复 2 public function getEmail() 3 { 4 $this->model = app::get('shop')->model('man ...

  6. tp5批量添加数据,批量修改数据

    标题 在一次项目开发中使用TP5框架开发,有个功能是向产品上传和修改.但是上传和修改是比较简单的,在上传的同时还需要实现 多个产品服务详情的添加和修改.经过一天半的研究,才完成该功能. 1.首先是多个 ...

  7. 《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL

    <!-- more --> 前言 之前其实在 <从0到1学习Flink>-- 如何自定义 Data Sink ? 文章中其实已经写了点将数据写入到 MySQL,但是一些配置化的 ...

  8. 写入mysql_《从0到1学习Flink》—— Flink 读取 Kafka 数据批量写入到 MySQL

    前言 之前其实在 <从0到1学习Flink>-- 如何自定义 Data Sink ? 文章中其实已经写了点将数据写入到 MySQL,但是一些配置化的东西当时是写死的,不能够通用,最近知识星 ...

  9. ThinkPHP批量添加数据和getField()示例

    批量添加数据 // 批量添加数据 $User = M('users'); $dataList[] = array('name'=>'thinkphp','email'=>'thinkphp ...

最新文章

  1. 实现跨浏览器html5表单验证
  2. 基于.NET的图表控件解决方案
  3. 大话设计模式-备忘录模式
  4. HDOJ 2546饭卡(01背包问题)
  5. [JS性能优化专篇]
  6. 机器学习算法_机器学习之EM算法和概率图模型
  7. CDays–5 习题二(利用Python科学计算特性,使用常用计算符)及相关内容解析。...
  8. codepush 微软服务器,ionic3 code-push 搭建自己服务器的问题
  9. HTTP缓存机制在iOS中的应用和体现
  10. 计算机在档案部门应用范围,计算机在档案管理中的相关运用
  11. django+echarts数据可视化(NBA球队数据可视化02)!
  12. 诗字辈大全:诗仙、诗圣、诗魔、诗佛、诗神、诗鬼、诗杰、诗狂、诗骨、诗家夫子、诗豪、诗囚、诗奴...
  13. k8s搭建v1.18.3高可用集群时添加master节点报错:failure loading certificate for CA: couldn‘t load the certificate fil
  14. Mysql数据库死锁实战-死锁演示-排他锁的相互等待
  15. R语言简单应用掷骰子游戏
  16. 二维数组的花式遍历技巧盘点
  17. OfficeExcel(1)
  18. 怎么安装aptdaemon模块_安装Pulseaudio模块在Ubuntu中开启蓝牙APTX/LDAC支持
  19. vim 变成只读了_VIM以只读方式打开文件
  20. 毕业设计 - 基于Java的聊天室系统设计与实现【源码+论文】

热门文章

  1. Centos6.3下apache+svn部署web版本同步
  2. 想起linux关机命令
  3. eclipse编码设置
  4. Android 经典欧美小游戏 guess who
  5. 【已解决】GO语言开发中调用另一个库报错 cannot refer to unexported name XXXX
  6. Linux netstat命令介绍
  7. js事件技巧方法整合
  8. Product生命周期
  9. stm32f4 RAM中运行程序 读保护设置
  10. 大话网站---从Hello World到高并发网站