欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-18 22:29:58
本文介绍了android中recyclerview实现item添加和删除的代码示例,分享给大家,具体如下: 先上效果图: recyclerview简介: re...

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

先上效果图:

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

recyclerview简介:

recyclerview用以下两种方式简化了数据的展示和处理:

1. 使用layoutmanager来确定每一个item的排列方式。

2. 为增加和删除项目提供默认的动画效果,也可以自定义。

recyclerview项目结构如下:

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

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);
    }
  }
}

源码下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: