recycleview的动态添加与删除

2024-04-25 06:32
文章标签 动态 删除 recycleview

本文主要是介绍recycleview的动态添加与删除,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在学习完简单的recycleview后,我发现它还可以添加删除,特意在自己的工程中进行了实现

首先,recycleview控件存在与v7包中,我们在写代码前要导入依赖包:

compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'

再看一下它的重要代码:

del = (Button) findViewById(R.id.delitem);
add = (Button) findViewById(R.id.additem);
mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
//列表布局, 第一个参数表示上下文环境, 第二个参数表示水平布局,第三个参数表示是否反转;后两个参数可省略
//mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL,false));

//表格布局,第一个参数表示上下文,第二个参数表示表格有多少列
//mRecyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this, 3));

//瀑布布局,
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.VERTICAL));
isflow = true;//添加分割线;列表布局设置DividerItemDecoration.HORIZONTAL;表格布局时设置DividerItemDecoration.VERTICAL//mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
//添加适配器
mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
之后,我们就要开始动态添加删除了
这用到了recycleview 的监听时间和一个接口的回调
/**
 * 创建一个回调接口
 */
public interface MyItemClickListener {void onItemClick(View view, int position);
}
之后就是适配器的俄不同了
class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {MyItemClickListener mItemClickListener;@Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_home, parent, false);//将全局的监听传递给holder
        MyViewHolder holder = new MyViewHolder(view, mItemClickListener);return holder;}@Override
    public void onBindViewHolder(MyViewHolder holder, int position) {//控件赋值
        holder.tv.setText(mDatas.get(position));}@Override
    public int getItemCount() {return mDatas.size();}// 删除数据
    public void removeData(int position) {mDatas.remove(position);//删除动画
        notifyItemRemoved(position);notifyDataSetChanged();}// 添加数据
    public void addData(int position) {//   list中添加数据,并通知条目加入一条
        mDatas.add(position, "我是商品" + position);//添加动画
        notifyItemInserted(position);}

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {private MyItemClickListener mListener;TextView tv;public MyViewHolder(View view, MyItemClickListener myItemClickListener) {super(view);tv = (TextView) view.findViewById(R.id.id_num);
这是对瀑布流时随机高度的一个生成,为了判断是否为瀑布流特地设置了布尔值isflow;
if (isflow) {ViewGroup.LayoutParams lp = tv.getLayoutParams();lp.height = (int) (Math.random() * 300 + 100);tv.setLayoutParams(lp);isflow = false;}//将全局的监听赋值给接口
            this.mListener = myItemClickListener;itemView.setOnClickListener(this);}@Override
        public void onClick(View view) {if (mListener != null) {mListener.onItemClick(view, getPosition());}}}public void setItemClickListener(MyItemClickListener myItemClickListener) {this.mItemClickListener = myItemClickListener;}
}
当然除了接口回调,下面这俩个方法也很重要
    // 删除数据
    public void removeData(int position) {mDatas.remove(position);//删除动画
        notifyItemRemoved(position);notifyDataSetChanged();}// 添加数据
    public void addData(int position) {//   list中添加数据,并通知条目加入一条
        mDatas.add(position, "我是商品" + position);//添加动画
        notifyItemInserted(position);}

效果如下图



这篇关于recycleview的动态添加与删除的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933923

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

mybatisplus的逻辑删除过程

《mybatisplus的逻辑删除过程》:本文主要介绍mybatisplus的逻辑删除过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录myBATisplus的逻辑删除1、在配置文件中添加逻辑删除的字段2、在实体类上加上@TableLogic3、业务层正常删除即

MybatisPlus中removeById删除数据库未变解决方案

《MybatisPlus中removeById删除数据库未变解决方案》MyBatisPlus中,removeById需实体类标注@TableId注解以识别数据库主键,若字段名不一致,应通过value属... 目录MyBATisPlus中removeBypythonId删除数据库未变removeById(Se

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

MySQL逻辑删除与唯一索引冲突解决方案

《MySQL逻辑删除与唯一索引冲突解决方案》本文探讨MySQL逻辑删除与唯一索引冲突问题,提出四种解决方案:复合索引+时间戳、修改唯一字段、历史表、业务层校验,推荐方案1和方案3,适用于不同场景,感兴... 目录问题背景问题复现解决方案解决方案1.复合唯一索引 + 时间戳删除字段解决方案2:删除后修改唯一字

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分