记一次处理 list 的 remove 方法遇到的问题

现在想来,这真是一个太简单的问题了,之前却一直被困扰其中,不知道 bug 在什么地方......

我自学 android 不久,算是摸着石头过河。这几天,我一直在搞 ListView 的问题,却不想被 存放数据源的 List 给拦住,并困惑了很久啊。我主要想做删除 ListView 的某一项,ListView 的每一项都是我自定义的 map ,里面有一个存放图片的 ImageView 和一个存放文字的 TestView,ImageView 原先是隐藏的,是一个删除的图标。我的逻辑是,在点下删除按钮后,就将每一项的删除图标都显示出来,然后可以点击删除图标进行行的删除,其实就是将存放数据源的 List 对应行的数据进行删除,再执行 notifyDataSetChanged() 方法即可通知 ListView 进行更新即可。我删除的逻辑是在点击删除图标时,并没有真的删除,而只是将对应行隐藏并重新刷新 ListView,而在点击确定按钮后才真正删除,在点击取消时也可恢复原状。开始的时候,我定义一个 flag 数组,里面标记了要删除的对应的行的位置,我想在点击确定按钮后,在一个循环里面依次删除标记的行数据。按说这个逻辑应该很合理啊,可是我删除的时候在有些情况下就抛 List 越界的异常,比如 List 里面有三条数据,我删除其中一条两条都没问题,可是如果我同时删除三条就会抛异常,我真是很郁闷啊......后来突然明白了原因,其实就是类似下面的代码出故障了:

for (int i = 0; i < selectedNum; i++) {
   list.remove(flag[i]);
}

假设list 的长度为2,selectedNum为2,意思就是我要同时删除list的1全部数据,但我remove(0) 的时候,可以移除,而此时list的长度就不是2了,已经变成了1,所以再循环里面remove(1),肯定越界抛异常啊......而这就是为什么删其中几条可以,删除全部就抛异常的原因。

本来是个很简单的问题,由于没考虑到这些,一直没发现bug,不过这个问题也让我学到了另一种解决的方法,就是自己写了一个保存列表和读取列表的方法,每次在删除之前先保存列表,相当于保存删除之前的样子,确定删除之后再保存列表,取消删除之后就读取之前保存的列表,终于将问题顺利解决。想想还是自己知道的太少了,技术太弱。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值