gpt4 book ai didi

java - 更新扩展 ArrayAdapter 的 ListView 时出现 ConcurrentModificationException

转载 作者:行者123 更新时间:2023-11-30 02:43:25 25 4
gpt4 key购买 nike

我有一个 ListView,每个单元都有一个适配器。这个适配器扩展了 ArrayAdapter(我的对象类)。到目前为止,该应用程序还有 2 个选项卡。 Tab 1 有列表,Tab 2 有 map 。

适配器中的每个单元格都有一个复选框,默认情况下未选中。

我遇到的问题是,当我切换选项卡时,选中的框会恢复为未选中状态,如果我重复选中框的数组,当我尝试将框标记为已选中时,我会收到 ConcurrentModificationException。

这是我正在做的代码:

    value_checkBox.setTag(route.getRouteShortName());

value_checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if (isChecked == true)
{
RouteListLV.arrayOfRoutesEnabled.add(route);
}
else
{
RouteListLV.arrayOfRoutesEnabled.remove(route);
}
}
});

这部分(上面的示例代码)有效,这里是我将检查的路由添加到可由多个 View 使用的静态数组中的地方。

    for (Route routeFromArray : RouteListLV.arrayOfRoutesEnabled)
{
if (routeFromArray.getRouteShortName().equals(route.getRouteShortName() ) )
{
System.out.println("Match!");
value_checkBox.setChecked(true); <--- causes the ConcurrentModificationException
}
}

这个循环(上面的 for 循环)不起作用,当我设置要检查的复选框时发生异常。我也尝试过迭代器,但我得到了相同的结果:

    Iterator<Route> iterator = RouteListLV.arrayOfRoutesEnabled.iterator();
while (iterator.hasNext())
{
Route routeFromArray = iterator.next();

if (routeFromArray.getRouteShortName().equals(route.getRouteShortName() ) )
{
System.out.println("Match!");
value_checkBox.setChecked(true); <--- causes the ConcurrentModificationException
}
}

关于这个问题有什么建议吗?需要说明的是,我有 2 个数组列表。一个是包含完整“路由”列表的那个,它被传递给 ArrayAdapter 以形成列表,我有第二个 arrayList 仅用于选定的路由。

最佳答案

您正在遍历 ArrayList (RouteListLV.arrayOfRoutesEnabled) 并在进行过程中对其进行修改。这会导致 ConcurrentModificationException,所以不要这样做。想办法首先找到您要修改的一个或多个元素,然后修改列表(之后永远不要使用迭代器)。或者构建列表的“影子”副本,在末尾包含您想要的所有内容,然后调用 removeAll() ,然后在原始列表上调用 addAll(newList)列表,这只是形式略有不同的相同想法。

关于java - 更新扩展 ArrayAdapter 的 ListView 时出现 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25451349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com