我有下面的代码:
CustomArrayAdapter adapter;
Set<Integer> checkedItems;
Iterator<Integer> it;
Model element;
adapter = (CustomArrayAdapter) getListAdapter();
checkedItems = adapter.getCheckedItems();
it = checkedItems.iterator();
int size = checkedItems.size();
for (int i = 0; i < size; i++) {
element = adapter.getItem(it.next());
// Do whatever
}试图使用adapter.getItem(it.next())获取listview项会引发错误NoSuchElementException。
在我的具体例子中,大小是1。最初我第一次在循环外部设置了Iterator,所以我猜它是放在第一个元素上。在第一次迭代中,我猜it.next()指向第一个元素,但它似乎没有抛出错误。
我做错了什么?
发布于 2015-01-19 20:48:11
我认为您的问题是调用it.next()返回next对象,这意味着如果从0开始,it.next()将返回1。由于ListView中只有1个元素,所以该元素驻留在索引0,而不是1,这就解释了为什么要获得NoSuchElementException。
要解决这个问题,您可以调用Iterator方法hasNext,如果有其他元素,它将返回true,如果没有,则返回false,然后调用element = adapter.getItem(it.next())。也许如下所示:
if (it.hasNext())
{
element = adapter.getItem(it.next());
}要处理第一个元素(索引0),您可以执行一个简单的检查:
if (it.next() == 1)
{
element = adapter.getItem(it.next() - 1);
}https://stackoverflow.com/questions/28032994
复制相似问题