Click事件上的Java android索引超出绑定异常

时间:2016-10-31 15:17:43

标签: java android arraylist

我遇到一个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新手。

2 个答案:

答案 0 :(得分:2)

当您使用selected_positions.remove(position);时,它会尝试在position位置编号中查找和删除整数。

您需要:selected_positions.remove((Integer)position);

答案 1 :(得分:0)

问题在于您如何处理多点触控。对于内存较低的设备,单击事件可能会非常缓慢,以至于您单击下一项。因此抛出该异常

您需要检查以下情况:

if(selected_positions.size()>position){
    selected_positions.remove(position);
}