Android中RecyclerView实现Item添加和删除的代码示例
程序员文章站
2023-12-16 08:46:40
本文介绍了android中recyclerview实现item添加和删除的代码示例,分享给大家,具体如下:
先上效果图:
recyclerview简介:
re...
本文介绍了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); } } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。