首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android中使用和迭代器时,试图获取listview项会引发NoSuchElementException。

在Android中使用和迭代器时,试图获取listview项会引发NoSuchElementException。
EN

Stack Overflow用户
提问于 2015-01-19 20:29:15
回答 1查看 108关注 0票数 0

我有下面的代码:

代码语言:javascript
复制
    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()指向第一个元素,但它似乎没有抛出错误。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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())。也许如下所示:

代码语言:javascript
复制
if (it.hasNext())
{
    element = adapter.getItem(it.next());
}

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

代码语言:javascript
复制
if (it.next() == 1)
{
    element = adapter.getItem(it.next() - 1);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28032994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档