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种有时会出现数组越界导致系统奔溃,第三种比较土,不过可用;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现 ListView item 的拖动排序,可以参考以下步骤: 1. 开启 ListView 的拖放功能: ```csharp listView1.AllowDrop = true; ``` 2. 在 ListViewItem 的 MouseDown 事件,记录当前被拖动项的索引: ```csharp private int dragIndex; private void listView1_MouseDown(object sender, MouseEventArgs e) { dragIndex = listView1.FocusedItem.Index; } ``` 3. 在 ListViewItemItemDrag 事件,开始拖动操作,使用 DoDragDrop 方法传递数据: ```csharp private void listView1_ItemDrag(object sender, ItemDragEventArgs e) { listView1.DoDragDrop(e.Item, DragDropEffects.Move); } ``` 4. 在 ListView 的 DragEnter 事件,判断拖入的数据是否为 ListViewItem,设置拖放效果为移动: ```csharp private void listView1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(ListViewItem))) { e.Effect = DragDropEffects.Move; } else { e.Effect = DragDropEffects.None; } } ``` 5. 在 ListView 的 DragOver 事件,更新被拖动项的位置,设置拖放效果为移动: ```csharp private void listView1_DragOver(object sender, DragEventArgs e) { Point point = listView1.PointToClient(new Point(e.X, e.Y)); ListViewItem item = listView1.GetItemAt(point.X, point.Y); if (item != null) { int dropIndex = item.Index; if (dropIndex != dragIndex) { listView1.Items.RemoveAt(dragIndex); listView1.Items.Insert(dropIndex, listView1.Items[dragIndex]); dragIndex = dropIndex; } } e.Effect = DragDropEffects.Move; } ``` 6. 在 ListView 的 DragDrop 事件,完成拖放操作: ```csharp private void listView1_DragDrop(object sender, DragEventArgs e) { ListViewItem item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem; Point point = listView1.PointToClient(new Point(e.X, e.Y)); ListViewItem dropItem = listView1.GetItemAt(point.X, point.Y); int dropIndex = dropItem != null ? dropItem.Index : listView1.Items.Count; listView1.Items.Insert(dropIndex, item); } ``` 通过以上步骤,即可实现 ListView item 的拖动排序功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值