diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java index 62d462f1c..078e02ff7 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/ContributionsActivity.java @@ -229,7 +229,7 @@ public class ContributionsActivity ((MediaListAdapter)contributionsList.getAdapter()).updateMediaList((ArrayList) result); } } - notifyAndClearDataSetObservers(); + notifyAndMigrateDataSetObservers(); } public void onLoaderReset(Loader cursorLoader) { @@ -262,11 +262,19 @@ public class ContributionsActivity // Do nothing for now } - private void notifyAndClearDataSetObservers() { + private void notifyAndMigrateDataSetObservers() { + Adapter adapter = contributionsList.getAdapter(); + + // First, move the observers over to the adapter now that we have it. + for (DataSetObserver observer : observersWaitingForLoad) { + adapter.registerDataSetObserver(observer); + } + observersWaitingForLoad.clear(); + + // Now fire off a first notification... for (DataSetObserver observer : observersWaitingForLoad) { observer.onChanged(); } - observersWaitingForLoad.clear(); } public void registerDataSetObserver(DataSetObserver observer) { @@ -283,7 +291,7 @@ public class ContributionsActivity if (adapter == null) { observersWaitingForLoad.remove(observer); } else { - adapter.registerDataSetObserver(observer); + adapter.unregisterDataSetObserver(observer); } } diff --git a/commons/src/main/java/org/wikimedia/commons/media/MediaDetailFragment.java b/commons/src/main/java/org/wikimedia/commons/media/MediaDetailFragment.java index f28774a61..bbec31ec2 100644 --- a/commons/src/main/java/org/wikimedia/commons/media/MediaDetailFragment.java +++ b/commons/src/main/java/org/wikimedia/commons/media/MediaDetailFragment.java @@ -278,6 +278,10 @@ public class MediaDetailFragment extends SherlockFragment { getView().getViewTreeObserver().removeOnScrollChangedListener(scrollListener); scrollListener = null; } + if (dataObserver != null) { + detailProvider.unregisterDataSetObserver(dataObserver); + dataObserver = null; + } super.onDestroyView(); }