本文介绍了Android中RecyclerView实现Item添加和删除的代码示例,分享给大家,具体如下:

先上效果图:
RecyclerView简介:
RecyclerView用以下两种方式简化了数据的展示和处理:
1. 使用LayoutManager来确定每一个item的排列方式。
2. 为增加和删除项目提供默认的动画效果,也可以自定义。
RecyclerView项目结构如下:
Adapter:使用RecyclerView之前,你需要一个继承自RecyclerView.Adapter的适配器,作用是将数据与每一个条目的界面进行绑定。
LayoutManager:用来确定每一个item如何进行排列摆放,何时展示和隐藏。
RecyclerView-Item添加:
在适配器中加入如下代码:
// 添加数据
public void addData(int position) {
// 在list中添加数据,并通知条目加入一条
list.add(position, "我是商品" + position);
//添加动画
notifyItemInserted(position);
}
调用时:
adapter.addData(list.size());
RecyclerView-Item删除:
在适配器中加入如下代码:
// 删除数据
public void removeData(int position) {
list.remove(position);
//删除动画
notifyItemRemoved(position);
notifyDataSetChanged();
}
调用时:
//Item里的删除 removeData(position); //外面的控件的删除 adapter. removeData(position);
需要注意的是我再删除动画的下面加了notifyDataSetChanged();代码,因为我们在删除条目时不一定是按照顺序删除的,也许是错位删除,这样会因为position的原因造成角标越界异常,所以需要整体刷新一下。
整体代码:
**1.MainActivity **
package com.android.qzs.qzsrecycleview;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private ImageView iv_add;
private RecycleAdapter adapter;
private List<String> list = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initRecycle();
iv_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 添加自带默认动画
adapter.addData(list.size());
}
});
}
private void initRecycle() {
// 纵向滑动
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(linearLayoutManager);
// 获取数据,向适配器传数据,绑定适配器
list = initData();
adapter = new RecycleAdapter(MainActivity.this, list);
mRecyclerView.setAdapter(adapter);
// 添加动画
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
}
private void initView() {
iv_add = (ImageView) findViewById(R.id.iv_add);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
}
protected ArrayList<String> initData() {
ArrayList<String> mDatas = new ArrayList<String>();
for (int i = 0; i < 1; i++) {
mDatas.add("我是商品" + i);
}
return mDatas;
}
}
2.RecycleAdapter
package com.android.qzs.qzsrecycleview;
import android.content.Context;
import android.support.design.widget.Snackbar;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by qzs on 2017/9/04.
*/
class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {
private Context context;
private List<String> list;
public RecycleAdapter(Context context, List<String> list) {
this.context = context;
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
context).inflate(R.layout.item_home, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
holder.tv.setText(list.get(position));
holder.tv_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (list.size() == 1) {
Snackbar.make(v, "此条目不能删除", Snackbar.LENGTH_SHORT).show();
} else {
// 删除自带默认动画
removeData(position);
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
// 添加数据
public void addData(int position) {
// 在list中添加数据,并通知条目加入一条
list.add(position, "我是商品" + position);
//添加动画
notifyItemInserted(position);
}
// 删除数据
public void removeData(int position) {
list.remove(position);
//删除动画
notifyItemRemoved(position);
notifyDataSetChanged();
}
/**
* ViewHolder的类,用于缓存控件
*/
class MyViewHolder extends RecyclerView.ViewHolder {
TextView tv, tv_delete;
//因为删除有可能会删除中间条目,然后会造成角标越界,所以必须整体刷新一下!
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.id_num);
tv_delete = (TextView) view.findViewById(R.id.tv_delete);
}
}
}
源码下载地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 实现Item添加和删除
# Item添加和删除
# Android RecyclerView滑动删除和拖动排序
# Android RecyclerView item选中放大被遮挡问题详解
# Android RecyclerView实现多种item布局的方法
# Android使用CardView作为RecyclerView的Item并实现拖拽和左滑删除
# Android中RecyclerView的item宽高问题详解
# Android RecyclerView显示Item布局不一致解决办法
# Android RecyclerView的Item点击事件实现整理
# Android 中RecyclerView多种item布局的写法(头布局+脚布局)
# Android RecyclerView自由拖动item的实现代码
# 我是
# 自带
# 绑定
# 的是
# 下载地址
# 两种
# 给大家
# 我再
# 自定义
# 需要注意
# 大家多多
# 然后会
# 简化了
# notifyItemRemoved
# qzs
# qzsrecycleview
# remove
相关文章:
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何确保西部建站助手FTP传输的安全性?
如何选择网络建站服务器?高效建站必看指南
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何快速生成可下载的建站源码工具?
MySQL查询结果复制到新表的方法(更新、插入)
内部网站制作流程,如何建立公司内部网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
Python lxml的etree和ElementTree有什么区别
如何通过.red域名打造高辨识度品牌网站?
英语简历制作免费网站推荐,如何将简历翻译成英文?
开封网站制作公司,网络用语开封是什么意思?
建站之星与建站宝盒如何选择最佳方案?
html制作网站的步骤有哪些,iapp如何添加网页?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
网站制作新手教程,新手建设一个网站需要注意些什么?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
建站之星如何保障用户数据免受黑客入侵?
如何高效利用200m空间完成建站?
建站之星如何修改网站生成路径?
建站10G流量真的够用吗?如何应对访问高峰?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
建站之星安装需要哪些步骤及注意事项?
如何在建站宝盒中设置产品搜索功能?
青岛网站建设如何选择本地服务器?
为什么Go需要go mod文件_Go go mod文件作用说明
IOS倒计时设置UIButton标题title的抖动问题
建站之星下载版如何获取与安装?
如何用美橙互联一键搭建多站合一网站?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
建站之星好吗?新手能否轻松上手建站?
网站制作网站,深圳做网站哪家比较好?
宝塔建站无法访问?如何排查配置与端口问题?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
高防服务器如何保障网站安全无虞?
建站之星2.7模板快速切换与批量管理功能操作指南
北京专业网站制作设计师招聘,北京白云观官方网站?
建站VPS推荐:2025年高性能服务器配置指南
韩国服务器如何优化跨境访问实现高效连接?
制作农业网站的软件,比较好的农业网站推荐一下?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】
如何正确下载安装西数主机建站助手?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
济南专业网站制作公司,济南信息工程学校怎么样?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
建站之星如何一键生成手机站?
如何快速搭建个人网站并优化SEO?
*请认真填写需求信息,我们会在24小时内与您取得联系。