在Android中使用和迭代器时,尝试获取listview项会抛出NoSuchElementException

时间:2015-01-19 20:29:15

标签: android iterator

我有以下代码:

    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()指向第一个元素,但它似乎没有引发错误。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为您的问题是,调用it.next()会返回下一个对象,这意味着如果您从0开始,it.next()将返回1.因为您{{1}其中只有1个元素,该元素位于索引0而不是1,这就解释了为什么你得到ListView

要解决此问题,您可以调用NoSuchElementException方法Iterator,如果有另一个元素,则返回hasNext,如果没有,则返回true,然后调用{ {1}}。也许类似于以下内容:

false

要处理获取第一个元素(索引0),您可以进行简单的检查:

element = adapter.getItem(it.next())
相关问题