android 一个集合问题导致不得不说的故事

本文详细描述了在处理集合操作时遇到位置索引越界的问题,并提供了有效的解决方案。通过实例演示如何正确地将位置索引转换为对象,避免了集合操作中的常见错误。同时,解释了为何原始实现导致了错误,并提供了修正后的代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

啥也不说,先看图,然后给你讲需求!


技能中只能添加三项,如果选择超过三个就给提示,选中的可以再次点击就是删除,这个肯定不难,但是做着发现一个问题,在这记录下,我的做法是把定义一个集合,然后当用户点击的时候判断这个是否在集合中如果在集合中就删除,如果不在集合中就添加,然后就adapter.notifyDataSetChanged()就完事,先把我写的点击事件相关逻辑贴一下:

@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
		if(clickPositions.contains(position)){//如果包含的话就是删除
			count--;
			clickPositions.remove(position);
		}else{
			count++;
			if(count>3){
				ShowToast.show("最多可添加三项哦");
				return;
			}
			clickPositions.add(position);
		}
		adapter.notifyDataSetChanged();
	}

然后当你要删除的时候 它会报角标越界!真是百思不得琪姐啊,后来发现List集合中存放的是Integer类型,而我romove的时候是直接把position传递进去的,这样会以为你是删除第几个集合中对应的值,而其实你就是想删除item对应的position,

解决方案:把position包装成对象即可 一句话的事clickPositions.remove(new Integer(position));


再次记录下!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值