mirror of
https://github.com/commons-app/apps-android-commons.git
synced 2025-10-27 12:53:55 +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);
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue