Я нашел тот же вопрос в I used synchronized list, and i still get ConcurrentModificationException, но я не нашел правильного ответа.Почему я использовал синхронизированный список и все еще получаю ConcurrentModificationException
Вот как я определен мой synchronized
список:
private List<ActionItemClickListener> actionItemClickListeners = Collections.synchronizedList(new ArrayList<ActionItemClickListener>());
А вот как я использовал его:
@Override
public void onBackPressed() {
boolean isConsume = false;
synchronized (actionItemClickListeners) {
//ConcurrentModificationException occur here
for (ActionItemClickListener listener : actionItemClickListeners) {
isConsume = isConsume | listener.onSystemBackPressed();
}
}
if(!isConsume) {
pendingFragment = null;
pendingTag = null;
currentFragmentTag = null;
super.onBackPressed();
}
}
public void addActionItemClickListener(ActionItemClickListener listener) {
synchronized (actionItemClickListeners) {
if (listener != null)
actionItemClickListeners.add(listener);
}
}
public void removeActionItemClickListener(ActionItemClickListener listener) {
synchronized (actionItemClickListeners) {
if (listener != null)
actionItemClickListeners.remove(listener);
}
}
Почему я все еще получаю ConcurrentModificationException
???
Можете ли вы рассказать нам, где вы получаете исключение? Кроме того, что такое 'super.onBackPressed();'? –
@ReutSharabani, является обратным вызовом android, вызванным os, когда нажата кнопка возврата – Blackbelt
@ReutSharabani Я прокомментировал код: 'super.onBackPressed()' супервызов, мой класс распространяется из класса 'Activity'. –