ListView中移除某个item的Remove()方法的应用

android开发中我们经常会遇到listView列表中删除某一条item的需求,下面是我总结的几种实现方法:

1.第一种是从listView的最大长度开始依次递减的for循环,当遇到满足条件的item后直接调用  mOldRelation.remove(position);的方法将其移除;

 

private List<TNPFriendTagRelation > mOldRelation=new ArrayList<>();
    ....... ...........
 for(int j=mOldRelation.size()-1;j>=0;j--)
                {
                    TNPFriendTagRelation info = mOldRelation.get(j);
                    if (info != null && info.getFriendTagId() != "123") {
                                mOldRelation.remove(j);
                        }
                }

有些不熟悉的人可能会写成这样:for(int j=0;j<mOldRelation.size()-1;j++);那么最终就会出现一种情况,那就是数组越界;

比如列表的长度为5,你第一次remove(1),那么现在列表的长度只剩下了4,当你再次执行remove(4)时,就会报错,你会觉得我的列表长度不是5吗,那你就错了,在你执行完第一次remove(1)时列表长度已经为4了,也就是说现在最大的位置只能执行remove(3),你执行了执行remove(4)所有就越界了;

2、第二种实现方法就是用游标Iterator ;

这种方法先是获取Iterator it = mOldRelation.iterator();的it对象,再直接用while (it.hasNext())去循环,遇到需要移除的直接调用 it.remove();

 Iterator it = mOldRelation.iterator();
                while (it.hasNext()) {
                    TNPFriendTagRelation info = (TNPFriendTagRelation) it.next();
                    if (info != null && info.getFriendTagId() != “123”) {
                                  it.remove();
                        }
                    }

3、还有最后一种最土的方法,那就是直接在弄一个新的列表,把需要移除的item忽略掉,把其他正常的item装进新的列表即可,代码就不写出来了;

总结上面三种方法,最稳定和快速的是第一种,第2种有时会出现数组越界导致系统奔溃,第三种比较土,不过可用;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值