summaryrefslogtreecommitdiff
path: root/core/java/android/database/DataSetObservable.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/database/DataSetObservable.java')
-rw-r--r--core/java/android/database/DataSetObservable.java12
1 files changed, 8 insertions, 4 deletions
diff --git a/core/java/android/database/DataSetObservable.java b/core/java/android/database/DataSetObservable.java
index 9200e8135316..51c72c1877e8 100644
--- a/core/java/android/database/DataSetObservable.java
+++ b/core/java/android/database/DataSetObservable.java
@@ -27,8 +27,12 @@ public class DataSetObservable extends Observable<DataSetObserver> {
*/
public void notifyChanged() {
synchronized(mObservers) {
- for (DataSetObserver observer : mObservers) {
- observer.onChanged();
+ // since onChanged() is implemented by the app, it could do anything, including
+ // removing itself from {@link mObservers} - and that could cause problems if
+ // an iterator is used on the ArrayList {@link mObservers}.
+ // to avoid such problems, just march thru the list in the reverse order.
+ for (int i = mObservers.size() - 1; i >= 0; i--) {
+ mObservers.get(i).onChanged();
}
}
}
@@ -39,8 +43,8 @@ public class DataSetObservable extends Observable<DataSetObserver> {
*/
public void notifyInvalidated() {
synchronized (mObservers) {
- for (DataSetObserver observer : mObservers) {
- observer.onInvalidated();
+ for (int i = mObservers.size() - 1; i >= 0; i--) {
+ mObservers.get(i).onInvalidated();
}
}
}