全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android中RecyclerView实现Item添加和删除的代码示例

本文介绍了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 


相关文章: 北京制作网站的公司,北京铁路集团官方网站?  网站按钮制作软件,如何实现网页中按钮的自动点击?  如何快速生成可下载的建站源码工具?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  建站之星安装后界面空白如何解决?  建站三合一如何选?哪家性价比更高?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何通过VPS搭建网站快速盈利?  自助网站制作软件,个人如何自助建网站?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  c# 在高并发场景下,委托和接口调用的性能对比  制作农业网站的软件,比较好的农业网站推荐一下?  重庆网站制作公司哪家好,重庆中考招生办官方网站?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  济南企业网站制作公司,济南社保单位网上缴费步骤?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  微信小程序 五星评分(包括半颗星评分)实例代码  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何高效完成自助建站业务培训?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  制作网站公司那家好,网络公司是做什么的?  全景视频制作网站有哪些,全景图怎么做成网页?  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  如何在宝塔面板中修改默认建站目录?  视频网站制作教程,怎么样制作优酷网的小视频?  如何解决VPS建站LNMP环境配置常见问题?  韩国服务器如何优化跨境访问实现高效连接?  高防服务器租用如何选择配置与防御等级?  如何在阿里云完成域名注册与建站?  如何高效完成独享虚拟主机建站?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  网站制作话术技巧,网站推广做的好怎么话术?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  实现虚拟支付需哪些建站技术支撑?  Python lxml的etree和ElementTree有什么区别  seo网站制作优化,网站SEO优化步骤有哪些?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  建站之星在线版空间:自助建站+智能模板一键生成方案  如何用搬瓦工VPS快速搭建个人网站?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何获取PHP WAP自助建站系统源码?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。