我在迭代器的for循环中传递标签列表,但引发了ConcurrentModificationException
public void clearTag() {
List<Tag> tags = binding.search.tagView.getTags();
Log.d(TAG, "clearTags: " + tags);
for (Tag tag : tags) {
Log.d(TAG, "clearTag: " + tag + " " + tag.getLayoutColor());
if (tag.getLayoutColor() == R.color.red) {
tags.remove(tag);
} else if (tag.getLayoutColor() == R.color.blue) {
tags.remove(tag);
} else if (tag.getLayoutColor() == R.color.green) {
tags.remove(tag);
}
}
updateTagVisibility();
//resetFilter();
}
最佳答案
这是因为在遍历数组时不允许进行remove和add操作。因此,您需要存储所有要删除的元素到另一个数组中,然后立即删除它们。这是一个例子:
public void clearTag() {
List<Tag> tags = binding.search.tagView.getTags();
List<Tag> tagsToRemove = new ArrayList<>();
Log.d(TAG, "clearTags: " + tags);
for (Tag tag : tags) {
Log.d(TAG, "clearTag: " + tag + " " + tag.getLayoutColor());
if (tag.getLayoutColor() == R.color.red) {
tagsToRemove.add(tag);
} else if (tag.getLayoutColor() == R.color.blue) {
tagsToRemove.add(tag);
} else if (tag.getLayoutColor() == R.color.green) {
tagsToRemove.add(tag);
}
}
tags.removeAll(tagsToRemove);
updateTagVisibility();
//resetFilter();
}