在 Android 中使用和迭代器时,尝试获取列表视图项目会抛出 NoSuchElementException

Trying to get a listview item throws NoSuchElementException when using and iterator in Android

我有以下代码:

    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()) 获取列表视图项时抛出错误 NoSuchElementException。

在我的具体情况下,大小是 1。最初我在 for 循环之外第一次设置 Iterator,所以我猜它被放置在第一个元素。在第一次迭代中,我猜 it.next() 指向第一个元素,但似乎没有,因为它会抛出错误。

我做错了什么?

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

要解决此问题,您可以调用 Iterator 方法 hasNext,如果有另一个元素,它将 return 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);
}