下面的代码在Field F = getField(counter)行抛出一个IndexOutOfBoundsException; 它为什么被抛出?当然,该字段存在是因为我正在基于fieldcount进行循环。或者管理员中的列表字段是否不是连续的?如果是这种情况,我应该如何从屏幕中删除类型为MyButtonField
的字段由于
int fieldCount = getFieldCount() - 1;
if(fieldCount > 1){
for(int counter = 0; counter <= fieldCount ; ++counter){
Field f = getField(counter);
if(f instanceof MyButtonField){
delete(f);
}
}
}
答案 0 :(得分:5)
您尚未指定delete(f)
的作用,但如果将其从字段列表中删除,则您的“有效计数”将有效降低。
要稍微重写和修复问题:
for (int index = getFieldCount() - 1; index >= 0; index--){
Field f = getField(index);
if (f instanceof MyButtonField) {
delete(f);
}
}
这将来自字段的 end 而不是 start ,因此如果删除条目并且所有内容都随机播放并不重要 - 洗牌将是你已经看过的那些。
答案 1 :(得分:1)
最好的方法是使用Iterator进行迭代,然后调用方法remove()。 例如:
for(Iterator it = getFields().iterator();it.hasNext()){
Field f = (Field) it.next();
if(f instanceof MyButtonField){
it.remove();
}
}
方法getFields()必须返回Field元素的集合。