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

相关文章

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

如何恢复回收站中已删除/清空的文件

回收站清空后如何恢复已删除的文件?是否可以恢复永久删除的文件?或者最糟糕的是,如果文件直接被删除怎么办?本文将向您展示清空回收站后恢复已删除数据的最佳方法。 回收站清空后如何恢复已删除的文件? “回收站清空后我还能恢复已删除的文件吗?” 答案是肯定的,但是在这种情况下您将需要一个  回收站恢复工具 来从回收站中检索文件: 错误/永久删除回收站或任何数字存储设备中的文件 直接删除的文件/

LeetCode:64. 最大正方形 动态规划 时间复杂度O(nm)

64. 最大正方形 题目链接 题目描述 给定一个由 0 和 1 组成的二维矩阵,找出只包含 1 的最大正方形,并返回其面积。 示例1: 输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4 示例2: 输入: 0 1 1 0 01 1 1 1 11 1 1 1 11 1 1 1 1输出: 9 解题思路 这道题的思路是使用动态规划

vue2实践:el-table实现由用户自己控制行数的动态表格

需求 项目中需要提供一个动态表单,如图: 当我点击添加时,便添加一行;点击右边的删除时,便删除这一行。 至少要有一行数据,但是没有上限。 思路 这种每一行的数据固定,但是不定行数的,很容易想到使用el-table来实现,它可以循环读取:data所绑定的数组,来生成行数据,不同的是: 1、table里面的每一个cell,需要放置一个input来支持用户编辑。 2、最后一列放置两个b

Linux 删除 当前下的 mysql-8.0.31 空文件夹

在Linux中,如果你想要删除当前目录下的名为mysql-8.0.31的空文件夹(即该文件夹内没有任何文件或子文件夹),你可以使用rmdir命令。但是,如果mysql-8.0.31文件夹并非完全为空(即它包含文件或子文件夹),rmdir命令会失败。 如果你的目标是删除mysql-8.0.31文件夹及其内部的所有内容(无论是否为空),你应该使用rm命令结合-r(或-R,它们是等价的)选项来递归地删

Windows下php扩展开发c++动态库

PHP扩展开发,从零了解到初步完成一个小项目,经过三天的仔细研究,现整理如下 一、需求介绍 PHP扩展开发,调用自己之前的c++动态库,完成功能 二、项目之前 系统:windows xp  开发工具:vs 2008 web环境:apache2.4  PHP5.3.29-VC9-ts-x86 aphach和PHP 环境之前已经搭建完成 PHP源码:去官网http://www.php.n