当前位置: 移动技术网 > IT编程>移动开发>Android > Android中RecyclerView实现Item添加和删除的代码示例

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

印顺长老,crazybutclever,温柔的慈悲简谱

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


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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网