mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 21:03:54 +01:00
fix intermittent crash in rotate-on-detail-view crash fix
Was sometimes crashing due to trying to remove observer too late after detecting the newly loaded adapter. (Race condition?) Change-Id: Ib62d78a2b7d863606070bf6d72ec37b9791bf243
This commit is contained in:
parent
b3771e16e9
commit
47af8f6b0f
2 changed files with 16 additions and 4 deletions
|
|
@ -229,7 +229,7 @@ public class ContributionsActivity
|
||||||
((MediaListAdapter)contributionsList.getAdapter()).updateMediaList((ArrayList<Media>) result);
|
((MediaListAdapter)contributionsList.getAdapter()).updateMediaList((ArrayList<Media>) result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
notifyAndClearDataSetObservers();
|
notifyAndMigrateDataSetObservers();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onLoaderReset(Loader cursorLoader) {
|
public void onLoaderReset(Loader cursorLoader) {
|
||||||
|
|
@ -262,11 +262,19 @@ public class ContributionsActivity
|
||||||
// Do nothing for now
|
// 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) {
|
for (DataSetObserver observer : observersWaitingForLoad) {
|
||||||
observer.onChanged();
|
observer.onChanged();
|
||||||
}
|
}
|
||||||
observersWaitingForLoad.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerDataSetObserver(DataSetObserver observer) {
|
public void registerDataSetObserver(DataSetObserver observer) {
|
||||||
|
|
@ -283,7 +291,7 @@ public class ContributionsActivity
|
||||||
if (adapter == null) {
|
if (adapter == null) {
|
||||||
observersWaitingForLoad.remove(observer);
|
observersWaitingForLoad.remove(observer);
|
||||||
} else {
|
} else {
|
||||||
adapter.registerDataSetObserver(observer);
|
adapter.unregisterDataSetObserver(observer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -278,6 +278,10 @@ public class MediaDetailFragment extends SherlockFragment {
|
||||||
getView().getViewTreeObserver().removeOnScrollChangedListener(scrollListener);
|
getView().getViewTreeObserver().removeOnScrollChangedListener(scrollListener);
|
||||||
scrollListener = null;
|
scrollListener = null;
|
||||||
}
|
}
|
||||||
|
if (dataObserver != null) {
|
||||||
|
detailProvider.unregisterDataSetObserver(dataObserver);
|
||||||
|
dataObserver = null;
|
||||||
|
}
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue