我有一个值列表。我想在取消选中复选框时删除列表项:
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/