我遇到一个Onclick事件的问题,它一直给我一个Out of Bounds Exception。我基本上列出了列表中有30个汽车名称,当有人点击汽车名称时,旁边会出现一个复选标记。当有人再次点击它时,我会使复选标记消失,这通常是当我得到一个超出范围的例外时..这是我的代码
private ArrayList<Integer> selected_positions= new ArrayList<>();
binding.list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
if(selected_positions.contains(position)) {
// Position is already CheckMarked so remove
selected_positions.remove(position);
} else {
// Position Clicked for the 1st time
selected_positions.add(position);
}
final FilterCarsAdapter FS = new FilterCarsAdapter(getActivity(), binding,selected_positions);
binding.list.setAdapter(FS);
}
});
我基本上按位置按住 Selected_Positions ArrayList中的值。问题是例如点击始终有效,如果我点击索引2中的项目然后出现复选标记但是如果我再次点击它以删除它我得到 java.lang.IndexOutOfBoundsException:索引2无效,大小为1 如果我位置5,那么我得到 java.lang.IndexOutOfBoundsException:索引5无效,大小为1 。任何帮助都会很棒,因为我是Java新手。
答案 0 :(得分:2)
当您使用selected_positions.remove(position);
时,它会尝试在position
位置编号中查找和删除整数。
您需要:selected_positions.remove((Integer)position);
答案 1 :(得分:0)
问题在于您如何处理多点触控。对于内存较低的设备,单击事件可能会非常缓慢,以至于您单击下一项。因此抛出该异常
您需要检查以下情况:
if(selected_positions.size()>position){
selected_positions.remove(position);
}