java - 从 Java ArrayList 中删除项目时接收 IndexOutOfBoundsException

标签 java android arraylist

我有一个值列表。我想在取消选中复选框时删除列表项:

ArrayList<SalesRoutes> routeList = new ArrayList<SalesRoutes>();
ArrayList<String> selectedRoutes = new ArrayList<String>();
 routeList =getSalesRoute();
for (int i = 0; i < routeList.size(); i++) {
         CheckBox ch = new CheckBox(this);
   ch.setId(i);
   ch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
                    if(arg0.isChecked()){   
                        Log.i("add", routeList.get(arg0.getId()).getRouteCode());
                        selectedRoutes.add(routeList.get(arg0.getId()).getRouteCode());
                        System.out.println("----add ----" + selectedRoutes);
                    }else {
                        selectedRoutes.remove(arg0.getId());
                        Log.i("remove", routeList.get(arg0.getId()).getRouteCode());
                        System.out.println("----remove ----" + selectedRoutes);
                    }
                }
            });
   }

这里我得到了 IndexOutOfBoundsException 因为 selectedRoutes 是选中的 CheckBox 值

   selectedRoutes   
   [R0002]

routeList 在屏幕上显示路线列表。它从数据库中获取路由。

示例路由列表:

  Route List
  R0001
  R0002   // selected this one ID is 1
  R0003

从 selectedRoutes(1) 调用 remove。

   selectedRoutes.remove(arg0.getId());

这里selectedRoutes只包含一条记录,也就是说没有索引1。

我怎样才能删除它?

最佳答案

问题在于这段代码:

selectedRoutes.remove(arg0.getId());
Log.i("remove", routeList.get(arg0.getId()).getRouteCode());
System.out.println("----remove ----" + selectedRoutes);

您认为(通常是不正确的)假设您的路线在您的潜在路线列表中的索引与您的路线在所选路线列表中的索引相同。相反,您需要在该索引处的潜在路由列表中获取路由的路由代码,然后遍历所选路由列表(实际上只是包含路由代码的字符串),并删除两个索引所在的索引配对。代码看起来像这样:

String routeCode = routeList.get(arg0.getId()).getRouteCode();
index = -1;
for(int i = 0; i < selectedRoutes.size(); i++) {
    if(routeCode.equals(selectedRoutes.get(i)) {
        index = i;
            break;
    }
}
if(index > -1)
    selectedRoutes.remove(index);
Log.i("remove", routeCode);
System.out.println("----remove ----" + selectedRoutes);

关于java - 从 Java ArrayList 中删除项目时接收 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243274/

相关文章:

php - 默认值写入mysql表

重新分配 Java session 对象

java - Android:您可以为单选按钮分配值吗?

JavaFX 组合框列表样式

java - Android 自定义 View 不以正确的方式处理透明度/alpha

java - Arraylist Remove() 不起作用

python - 如何在python2.7上从三个数组中获取三维分布

java - Spring Boot - 如何通过名称获取使用 @Service 注释的类

将参数传递给方法的 Android 数据绑定(bind)

java - 无法执行 android :onClick 的方法